2012-04-14 112 views
1

我写了一个简单的应用程序,当网络状态发生变化时,atm只是弹出一条Toast消息。这在模拟器上完美的工作,但我已经在2个不同的Android手机上尝试过它,似乎广播接收器从来没有触发这些事件。 这是我的广播reciever:Android - 广播接收器在模拟器上工作不在电话上

public class PhoneStateReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    {  
     Toast.makeText(context, "Hi", Toast.LENGTH_SHORT).show();  
    } 
} 

这是我的manifest文件:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
.. 
    <uses-sdk android:minSdkVersion="8" /> 

    <application 
.. 
     <receiver android:name=".PhoneStateReceiver" android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE"></action> 
      </intent-filter> 
     </receiver> 
.. 
    </application> 
<!-- Needed to check when the network connection changes --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
</manifest> 

任何人都知道为什么发生这种情况还是什么我可能做错了?

感谢, 罗布

+1

我很惊讶,它的工作原理在模拟器上 - 它不应该。试图通过非UI组件(例如'BroadcastReceiver')与用户界面进行交互并不是如何做的事情。如果仅在此阶段用于测试目的,则只需使用“Log”调用并将手机连接到开发机器以观看logcat。或者(为了测试目的)让你的'BroadcastReceiver'生成一个状态栏通知。 – Squonk 2012-04-14 15:59:05

+0

感谢您的回复。我已经尝试了System.out.println(“sometext”),并且再次输出到模拟器中的logcat,但不是在设备上 – crazyfool 2012-04-14 16:29:49

+0

如果您通过切换Wi-Fi网络来测试此功能,那么您可能还需要android.permission .ACCESS_WIFI_STATE'权限。你也可以试听'android.net.wifi.STATE_CHANGE'。 – Squonk 2012-04-14 16:38:42

回答

0

我无法找到任何东西在你的代码显然是不正确的,所以这里是一个尽力而为的。

在您的清单代替块之后的

PVS

+0

感谢您的回复队友,尝试过,仍然没有运气。我很确定接收器没有被触发,我只是不知道为什么。我也试过把广播内容放在服务器上,这种服务再次在模拟器上工作,但不在设备上。 – crazyfool 2012-04-14 17:04:41

相关问题