2

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

我的清单:

<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
4

3 回答 3

2

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

无法在 BroadcastReceiver SMS 中实例化接收器

于 2013-09-07T03:44:59.973 回答
0

你有没有在 AndroidManifest.xml 中添加权限,

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
于 2013-09-07T03:26:07.973 回答
0

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

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

这应该可以肯定地解决您的问题!

于 2013-09-07T04:07:23.583 回答