在Service中创建BroadcastReceiver时出现问题

时间:2017-01-18 11:28:13

标签: android service broadcastreceiver

我有一项服务,我在其中注册了一个简单的广播接收器,以检查设备是否已从充电器插入/拔出。我通过致电

开始了这项服务
      Intent intent = new Intent(MyActivity.this,TestReceiverService.class); 
      startService(intent);

TestReceiverService.class

public class TestReceiverService extends Service {
@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
}

@Override
public void onCreate() {
    super.onCreate();
    registerTestReceiver();
}


private void registerTestReceiver() {

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
    registerReceiver(mTestReceiver, intentFilter);
}

@Nullable
@Override
public IBinder onBind(Intent intent) {

    return null;
}

public BroadcastReceiver mTestReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Event triggered--------", Toast.LENGTH_SHORT).show();
    }
};}

但是当设备插入/拔出时我没有得到祝酒。我试图直接从活动中调用此广播接收器并且它工作。但是在内部服务中它不起作用。我对服务不太熟悉。请提出解决方案

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果你只想做一次,那么你的逻辑就没问题。

onCreate只会调用一次,因此会执行一次。每当任何客户端呼叫startService()bindService()时,该服务将返回可用的绑定器,并且将调用onServiceConnected()回叫。

这意味着下次它不会再次执行onCreate(),因此对于您的情况,此toast仅显示一次。

因此,当用户尝试拨打onStartCommand()onBind()时,startService()bindService()会直接致电。

或者,如果您想在连接服务时显示祝词,那么您必须在onStart()onBind()

中进行

答案 1 :(得分:0)

我认为这是因为您的上下文错误,请尝试使用getApplicationContext()