我正在开发一个需要在Android Boot
上启动BackgroundService
的应用程序
这是我在Android Boot
上启动BroadcastReceiver
时使用的代码
public class StartOnBootService extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try
{
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Intent serviceIntent = new Intent();
serviceIntent.setAction("com.package.myApplicationPackage.BackgroundService");
context.startService(serviceIntent);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
这是我的BackgroundService.class
public class BackgroundService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
//code to execute when the service is first created
Toast.makeText(getBaseContext(), "BACKGROUND SERVICE STARTED", Toast.LENGTH_LONG).show();
}
@Override
public void onDestroy() {
//code to execute when the service is shutting down
}
@Override
public void onStart(Intent intent, int startid) {
//code to execute when the service is starting up
}
}
这是我在Android启动时设法从CatLog狙击的错误日志。
12-21 10:28:01.279: E/EmbeddedLogger(1710): App crashed! Process: com.package.myApplicationPackage
12-21 10:28:01.289: E/EmbeddedLogger(1710): App crashed! Package: com.package.myApplicationPackage v1 (1.0)
12-21 10:28:01.289: E/EmbeddedLogger(1710): Application Label: myApp Label
我的AndroidManifest.xml
文件
</service>
<service android:name=".BackgroundService">
<intent-filter>
<action android:name="com.package.myApplicationPackage.BackgroundService" />
</intent-filter>
</service>
<receiver
android:name=".receiver.StartOnBootService"
android:enabled="true"
android:exported="true"
android:label="StartOnBootService">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
答案 0 :(得分:3)
您广播的接收者名称和Android清单接收者名称完全不同。
StartOnBootService
或显示为StartMyServiceAtBootReceiver
答案 1 :(得分:0)
在抢过stackoverflow之前查看清单文件可能是一个好习惯。 我也有一个类似的问题,“启动后崩溃”,并注意到我的包名称错误,因为我的一个接收器仓促复制粘贴操作。
<receiver android:name="com.somepackage.broadcast.ConnectionChangeReceiver" />
确实有一个拼写错误
<receiver android:name="com.somepackage.broadcast.broadcast.ConnectionChangeReceiver" />
纠正它显然解决了我的问题。