【问题标题】:BroadcastReceiver not firing for network connection changesBroadcastReceiver 不会因网络连接更改而触发
【发布时间】:2013-09-07 03:03:41
【问题描述】:

我正在尝试监听网络连接的变化。当我打开或关闭飞行模式时,我的广播接收器似乎没有启动。我不确定这是否是因为我没有正确注册它,或者飞行模式更改可能不会导致它触发。任何建议表示赞赏。谢谢!

我的清单:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

<receiver android:name=".NetworkReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

我的广播接收器类:

public class NetworkReceiver extends BroadcastReceiver {

    private SharedPreferences prefs;
    private SharedPreferences.Editor prefEditor;

    @Override
    public void onReceive(Context context, Intent intent) {

        prefs = PreferenceManager.getDefaultSharedPreferences(context);
        prefEditor = prefs.edit();

        Boolean has_connection = prefs.getBoolean("has_connection", false);
        prefEditor.putBoolean("has_connection", !has_connection);
        prefEditor.commit();

        System.err.println("Network Receiver notified of a connectivity change!");
        System.err.println("New has_connection: " + !has_connection);

    }

}

另外,应用程序运行大约 45 秒后,它突然崩溃并出现以下错误:

09-06 21:29:48.775: E/AndroidRuntime(15613): java.lang.RuntimeException: Unable to instantiate receiver com.mysite.myapp.NetworkReceiver: java.lang.ClassNotFoundException: com.mysite.myapp.NetworkReceiver

【问题讨论】:

标签: android connection broadcastreceiver


【解决方案1】:

这看起来像是一个与您遇到的类似问题的主题。也许这些答案之一会有所帮助:

Unable to instantiate receiver in BroadcastReceiver SMS

【讨论】:

  • 谢谢。问题是我的接收器位于一个名为“数据库”的包中,该包位于“src”文件夹中。因此,我的清单需要是 &lt;receiver android:name="database.NetworkReceiver" &gt; 现在它正在接收连接更改并且不再崩溃。谢谢!
【解决方案2】:

您是否在 AndroidManifest.xml 中添加权限,

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>

【讨论】:

  • 是的。我应该发布的。我将编辑我的帖子以显示这一点。系统完全启动后,我也会收到一条错误消息,导致它崩溃。我也会发这个。谢谢!
【解决方案3】:

不要为接收者提供相对名称。给出完整的包名。例如,

<receiver android:name="com.YouPackageName.NetworkReceiver" >
<intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>

这肯定能解决你的问题!

【讨论】:

  • 谢谢。我已经尝试了几种不同的方法,但结果相同。我在一个名为“数据库”的包中有这个类。所以我试过com.mysite.myapp.NetworkReceivercom.mysite.myapp.database.NetworkReceiver。不幸的是,两者似乎都无法解决问题。事实上,我在所有三种设置下都得到了完全相同的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多