很多时候为了用户使用方便,我们需要在移动设备开机时设置一些随机自启动服务,如定期发送自己关心的讯息、新收邮件的自动推送以及语音唤醒及识别等等,这些服务在日常生活中还是很有意义的。
对于注册并开启自动启动的代码也是比较简单的,百度可以在很多网站上找到实例,现把我自己在项目中使用到的代码贴在下面:
public class OnBootReceiver extends BroadcastReceiver {
private static final String TAG = "SmartService";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
// 开启应用
Intent sintent = context.getPackageManager().getLaunchIntentForPackage( "app应用包名" );
context.startActivity( sintent );
// 开启服务代码
//context.startService( new Intent(context, ServerService.class) );
Log.e(TAG, "Brodcast received!!!");
}
}
}
相应地,我们需要在AndroidManifest.xml
文件中加入权限设置和启动注册,如下:
// 权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
// 注册广播接收器,设置过滤器
<receiver android:name="app应用包名.OnBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
将上述代码加入项目中即可以实现开机自动启动?如果是的话,你就真的太幸运了。笔者在小米手机上试过很多次,这样做是基本实现不了手机开机自动启动应用的,还必须在手机上作如下设置才行。
先从正在测试的app中退出,打开应用管理允许“开启WIFI”,再在自启动管理中允许需要开机启动的app,然后再打开app注册服务即可实现下次设备启动时自动启动,顺序最好严格按照这个过程来操作,因为笔者做过很多尝试都不一定能成功做到自动启动。
2016.09.06 补充:发现在注册Service
之前先需要先使用Activity
即extends Activity
进行注册,之后再改为extends Service
或者是直接命令 adb shell am startservice <Your package>/<Your Servce>
启动Service