一般通过搜索引擎你会得到以下结果
看上去似乎没啥问题,如果你是同一个工程内完成以上操作的确没问题。但是如果你是开发SDK的开发者,BootBroadcastReceiver是在SDK内实现的话,你引用SDK的工程死活都跑不起那个服务,原因就在于<receiver android:name="BootBroadcastReceiver"> 这句,系统找不到你的函数,所以要写成<receiver android:name="com.xxxxxx.service.BootBroadcastReceiver"> 完整的包路径就可以了!
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class BootBroadcastReceiver extends BroadcastReceiver {
//重写onReceive方法
@Override
public void onReceive(Context context, Intent intent) {
//后边的XXX.class就是要启动的服务
Intent service = new Intent(context,XXXclass);
context.startService(service);
Log.v("TAG", "开机自动服务自动启动.....");
//启动应用,参数为需要自动启动的应用的包名
Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
context.startActivity(intent );
}
}
添加过滤参数和启动权限
<receiver android:name="BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
看上去似乎没啥问题,如果你是同一个工程内完成以上操作的确没问题。但是如果你是开发SDK的开发者,BootBroadcastReceiver是在SDK内实现的话,你引用SDK的工程死活都跑不起那个服务,原因就在于<receiver android:name="BootBroadcastReceiver"> 这句,系统找不到你的函数,所以要写成<receiver android:name="com.xxxxxx.service.BootBroadcastReceiver"> 完整的包路径就可以了!