Android 在服务内部创建BroadcastReceiver时出现问题

Android 在服务内部创建BroadcastReceiver时出现问题,android,service,broadcastreceiver,Android,Service,Broadcastreceiver,我有一项服务,其中我注册了一个简单的广播接收器,以检查设备是否从充电器上插拔。我打电话开始服务 Intent intent = new Intent(MyActivity.this,TestReceiverService.class); startService(intent); TestReceiverService.class public class TestReceiverService extends Service { @Override public v

我有一项服务,其中我注册了一个简单的广播接收器,以检查设备是否从充电器上插拔。我打电话开始服务

      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();
    }
};}
但是当设备被插入/拔出时,我没有得到祝酒词。我试着从活动中直接呼叫这个广播接收器,它工作了。但内部服务不工作。我对服务不太熟悉。请提出解决办法


提前谢谢。

如果您只想做一次,那么您的逻辑就可以了

onCreate
将只调用一次,因此它将执行一次。无论何时任何客户端调用
startService()
bindService()
,该服务都将返回可用的活页夹,并且将调用
onServiceConnected()
回调

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

因此,每当用户试图调用
startService()
bindService()
时,
onStartCommand()或
bindService()
将直接调用


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

中执行,如果您只想执行一次,那么您的逻辑就可以了

onCreate
将只调用一次,因此它将执行一次。无论何时任何客户端调用
startService()
bindService()
,该服务都将返回可用的活页夹,并且将调用
onServiceConnected()
回调

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

因此,每当用户试图调用
startService()
bindService()
时,
onStartCommand()或
bindService()
将直接调用



或者,如果您想在连接服务时显示toast,那么您必须在
onStart()
onBind()
中执行操作。我认为这是因为您的上下文错误,请尝试使用
getApplicationContext()
我认为是因为您的上下文错误,请尝试使用
getApplicationContext()

onCreate将只调用一次,因此它将执行一次。。无论何时任何客户端调用startService()或bindService(),该服务都将返回可用的绑定器,这意味着下次将不再执行onCreate()。。因此,对于您的情况,此toast仅显示一次您将服务添加到androidmanifest.xml中的EDID?onCreate将只调用一次,因此它将执行一次。。无论何时任何客户端调用startService()或bindService(),该服务都将返回可用的绑定器,这意味着下次将不再执行onCreate()。。因此,对于您的情况,此toast仅显示一次。您是否在androidmanifest.xml中添加了您的服务?我至少不会收到一次toast。我已经尝试使用onStart()。没什么区别我不知道你说的是什么意思只叫了一次。。。只要服务实例不存在,就会调用它,也就是说,
ondestory
被绝对调用,这是其内在含义。。如果调用onDestroy()意味着onCreate()肯定会调用。。已执行supose onstart命令,但这并不意味着onDestroy()将很快调用。如果我们正在绑定该服务,那么当所有客户端都删除其与该服务的连接时,onDestroy()将调用。@poojarc,您在其中调用startService()或bindService()??我的意思是在哪个类和方法中?@poojarc,你在你的androidmanifest.xml中添加了你的服务了吗?我至少一次都没有收到祝酒词。我已经尝试使用onStart()。没什么区别我不知道你说的是什么意思只叫了一次。。。只要服务实例不存在,就会调用它,也就是说,
ondestory
被绝对调用,这是其内在含义。。如果调用onDestroy()意味着onCreate()肯定会调用。。已执行supose onstart命令,但这并不意味着onDestroy()将很快调用。如果我们正在绑定该服务,那么当所有客户端都删除其与该服务的连接时,onDestroy()将调用。@poojarc,您在其中调用startService()或bindService()??我的意思是在哪个类和方法中?@poojarc,你在androidmanifest.xml中添加了你的服务吗?谢谢你的时间@RyanThanks谢谢你的时间@Ryan