我有一项服务,我在其中注册了一个简单的广播接收器,以检查设备是否已从充电器插入/拔出。我通过致电
开始了这项服务 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();
}
};}
但是当设备插入/拔出时我没有得到祝酒。我试图直接从活动中调用此广播接收器并且它工作。但是在内部服务中它不起作用。我对服务不太熟悉。请提出解决方案
提前致谢。
答案 0 :(得分:2)
如果你只想做一次,那么你的逻辑就没问题。
onCreate
只会调用一次,因此会执行一次。每当任何客户端呼叫startService()
或bindService()
时,该服务将返回可用的绑定器,并且将调用onServiceConnected()
回叫。
这意味着下次它不会再次执行onCreate()
,因此对于您的情况,此toast
仅显示一次。
因此,当用户尝试拨打onStartCommand()
或onBind()
时,startService()
或bindService()
会直接致电。
或者,如果您想在连接服务时显示祝词,那么您必须在onStart()
或onBind()
答案 1 :(得分:0)
我认为这是因为您的上下文错误,请尝试使用getApplicationContext()