java - 调用 registerBroadcast 时出现 NullPointerException

标签 java android service broadcastreceiver

我已经编写了一个服务,它应该被告知连接的变化。我为此编写了一个 BroadcastReceiver:

public class ConnectivityBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager con = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        // ...
    }
}

并且我已经将它添加到我的 AndroidManifest.xml 中:

<application> <!-- ... -->
    <receiver android:name="com.mycompany.mobile.android.services.impl.ConnectivityBroadcastReceiver"
              android:label="NetworkConnection">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
    </receiver>
</application>

但是当我尝试这样注册我的接收器时:

class MyService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        this.registerReceiver(new ConnectivityBroadcastReceiver(this), new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

        return START_STICKY;
    }
}

我得到了一个 NPE:

java.lang.NullPointerException
    at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:308)
    at com.mycompany.mobile.android.services.impl.MyService.onStartCommand(...)

它出现在我调用 registerReceiver 的行中。 ConnectivityBroadcastReceiver 和 IntentFilter 都不能为 null,还是我错了?我错过了实现方法吗? onStarCommand 中的调用是否非法?

最佳答案

您可能很久以前就解决了您的问题,但该解决方案可能对 google wanderers 有用。

我在 IntentService 中有相同的 NPE。我试图在该服务的构造函数中注册接收器。当我将注册移动到 onHandleIntent() 时它开始工作。

此外,我不需要比我的应用生命周期更长的接收器,所以我只是在 AndroidManifest 之外创建并注册了它。

看起来像这样:

private final BroadcastReceiver connectivityReceiver = new BroadcastReceiver(){

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

        //do your thing

    }

};

public MyService() {
    super("MyService");

}

@Override
protected void onHandleIntent(Intent intent) {

    registerReceiver(connectivityReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

    //do your thing

}

关于java - 调用 registerBroadcast 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9034283/

相关文章:

android - 停止服务 "handler loop code"不起作用

java - 两个接口(interface)中的弃用方法

java - 重叠 JTextField 和 JLabel

java - 如何避免 LOCATION_SERVICE 的 NullPointerException?

java - android edittext最小值和最大值

java - eclipse 安卓 : JSONAdapter not updating ListView

java - 如何通过textview在屏幕上显示android中发生的生命周期事件

android - 升级到 Espresso 2.1,现在出现依赖冲突

c# - 在没有计时器的情况下保持 Windows 服务运行

android - 服务已启动但未显示在设置 -> 正在运行的服务中