前段時間在做智能機器人等定制android系統(tǒng)開發(fā)的應用瞎抛,因為機器人定制應用,需要在系統(tǒng)啟動的時候就運行程序,不需要展示系統(tǒng)桌面梯投,這里需要用到系統(tǒng)開機應用自啟動,也就是常說的開機自啟動。
記錄一下實現(xiàn)流程:
1分蓖、權(quán)限引入
在AndroidManifest.xml文件中配置監(jiān)聽啟動權(quán)限
<!--.接收啟動完成的廣播權(quán)限-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2尔艇、創(chuàng)建監(jiān)聽啟動完成的廣播接收者
新建一個監(jiān)聽廣播接收者BootReceiver
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
LogUtils.e("自啟動了 !C春住V胀蕖!蒸甜!");
Intent newIntent = new Intent(context, MainActivity.class); // 要啟動的Activity
//1.如果自啟動APP棠耕,參數(shù)為需要自動啟動的應用包名
//Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
//這句話必須加上才能開機自動運行app的界面
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//2.如果自啟動Activity
context.startActivity(newIntent);
//3.如果自啟動服務
//context.startService(newIntent);
}
}
}
3、最后在AndroidManifest中注冊這個廣播接收者
<receiver
android:name=".server.BootReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
4柠新、編譯并啟動一下應用
安裝app到手機上窍荧,然后啟動一次程序(據(jù)說安卓4.0以后,必須先啟動一次程序才能接收到開機完成的廣播恨憎,目的是防止惡意程序)
5蕊退、重啟手機,測試app有沒有自動啟動憔恳。如果有瓤荔,那么恭喜你。如果沒有钥组,請往下看输硝。
如果按照上面的全部步驟后操作后,重啟沒有自動啟動程序者铜,怎么辦呢腔丧?是怎么回事呢?
- 那么首先請檢查一下你的手機是不是安裝了360等安全助手之類的軟件作烟,如果有愉粤,請在軟件的自啟動軟件管理中將app設置為允許
- 我的手機沒有安裝這些軟件,但是手機中自帶了安全助手拿撩,有的手機系統(tǒng)設置里面自帶了自啟動軟件管理的功能 衣厘,所以在這里將我們的app設置為允許開機啟動),重啟手機压恒,測試是否成功影暴。
如果還是失敗,那么請檢查你的手機是不是設置了app安裝首選位置是sd卡探赫,據(jù)說安裝到sd卡的話型宙,因為手機啟動成功后(發(fā)送了啟動完成的廣播后)才加載sd卡,所以app接收不到廣播伦吠。如果是的話妆兑,把app安裝到內(nèi)部存儲試試魂拦。如果不懂得設置的話,那么直接在AndroidManifest.xml文件中設置安裝路徑搁嗓,在manifest的根節(jié)點中加入android:installLocation="internalOnly"
芯勘。如下:
<manifest
package="cn.weixq.autorun"
xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="internalOnly">