我在我的应用中有一个Service
和BroadcastReceiver
,但是如何直接从BroadcastReceiver
启动服务?使用
startService(new Intent(this, MyService.class));
在广播接收器(BroadcastReceiver)中无法工作,有什么想法?
编辑:
context.startService(..);
可以工作了,我忘记了上下文部分。
我在我的应用中有一个Service
和BroadcastReceiver
,但是如何直接从BroadcastReceiver
启动服务?使用
startService(new Intent(this, MyService.class));
在广播接收器(BroadcastReceiver)中无法工作,有什么想法?
编辑:
context.startService(..);
可以工作了,我忘记了上下文部分。
Don't forget
context.startService(..);
应该是这样的:
Intent i = new Intent(context, YourServiceName.class);
context.startService(i);
请务必将该服务添加到manifest.xml文件中
使用您的BroadcastReceiver的onReceive
方法中的context
,以启动您的服务组件。
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, YourService.class);
context.startService(serviceIntent);
}
最佳实践:
在创建意图时,特别是从 BroadcastReceiver
开始时,不要将 this 作为上下文。
请使用以下方式获取 context.getApplicationContext()
Intent intent = new Intent(context.getApplicationContext(), classNAME);
context.getApplicationContext().startService(intent);
try {
Intent intentService = new Intent(context, MyNewIntentService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(intentService );
} else {
context.startService(intentService );
}
} catch (Exception e) {
e.printStackTrace();
}
最好使用ContextCompat:
Intent serviceIntent = new Intent(context, ForegroundService.class);
ContextCompat.startForegroundService(context, serviceIntent);