很多時(shí)候?yàn)榱擞脩羰褂梅奖闩凶澹覀冃枰谝苿?dòng)設(shè)備開機(jī)時(shí)設(shè)置一些隨機(jī)自啟動(dòng)服務(wù)吉执,如定期發(fā)送自己關(guān)心的訊息叁扫、新收郵件的自動(dòng)推送以及語(yǔ)音喚醒及識(shí)別等等,這些服務(wù)在日常生活中還是很有意義的丧荐。
對(duì)于注冊(cè)并開啟自動(dòng)啟動(dòng)的代碼也是比較簡(jiǎn)單的,百度可以在很多網(wǎng)站上找到實(shí)例喧枷,現(xiàn)把我自己在項(xiàng)目中使用到的代碼貼在下面:
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)) {
// 開啟應(yīng)用
Intent sintent = context.getPackageManager().getLaunchIntentForPackage( "app應(yīng)用包名" );
context.startActivity( sintent );
// 開啟服務(wù)代碼
//context.startService( new Intent(context, ServerService.class) );
Log.e(TAG, "Brodcast received!!!");
}
}
}
相應(yīng)地篮奄,我們需要在AndroidManifest.xml
文件中加入權(quán)限設(shè)置和啟動(dòng)注冊(cè),如下:
// 權(quán)限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
// 注冊(cè)廣播接收器割去,設(shè)置過(guò)濾器
<receiver android:name="app應(yīng)用包名.OnBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
將上述代碼加入項(xiàng)目中即可以實(shí)現(xiàn)開機(jī)自動(dòng)啟動(dòng)窟却?如果是的話,你就真的太幸運(yùn)了呻逆。筆者在小米手機(jī)上試過(guò)很多次夸赫,這樣做是基本實(shí)現(xiàn)不了手機(jī)開機(jī)自動(dòng)啟動(dòng)應(yīng)用的,還必須在手機(jī)上作如下設(shè)置才行咖城。
先從正在測(cè)試的app中退出茬腿,打開應(yīng)用管理允許“開啟WIFI”,再在自啟動(dòng)管理中允許需要開機(jī)啟動(dòng)的app宜雀,然后再打開app注冊(cè)服務(wù)即可實(shí)現(xiàn)下次設(shè)備啟動(dòng)時(shí)自動(dòng)啟動(dòng)切平,順序最好嚴(yán)格按照這個(gè)過(guò)程來(lái)操作,因?yàn)楣P者做過(guò)很多嘗試都不一定能成功做到自動(dòng)啟動(dòng)辐董。
2016.09.06 補(bǔ)充:發(fā)現(xiàn)在注冊(cè)Service
之前先需要先使用Activity
即extends Activity
進(jìn)行注冊(cè)悴品,之后再改為extends Service
或者是直接命令 adb shell am startservice <Your package>/<Your Servce>
啟動(dòng)Service