經我寫Demo測試之後驗證了Andorid5.0左右的售貨機設備、Android9.0的測試手機都可以實現開機自啓動的功能,要注意在篇中代碼之外記得允許目標應用自動啓動 ~
核心:開機自啓動的實現主要在於 android.permission.RECEIVE_BOOT_COMPLETED 這條開機廣播
如果是新手不瞭解四大組件之一廣播使用的話, 可以來這補補課 ~ 主要介紹了一些廣播的基礎知識 ~
加入權限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
定義廣播
主要用於我們接收到系統發送的開機廣播後,APP要做的處理 ~
StartReceiver
package nk.com.startappdemo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/**
* @author MrLiu
* @date 2020/5/8
* desc 廣播處理
*/
public class StartReceiver extends BroadcastReceiver {
public StartReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
//此處及是重啓的之後,打開我們app的方法
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Intent intent= new Intent(context, MainActivity.class);
//intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 非常重要,如果缺少的話,程序將在啓動時報錯
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//自啓動APP(Activity)
context.startActivity(intent);
//自啓動服務(Service)
//context.startService(intent);
}
}
}
註冊廣播
AndroidManifest.xml 靜態註冊廣播,配置系統開機的intent-filter ~
<receiver
android:name=".StartReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
場景測試
簡單的一個輸出語句,同於效果展示,當值不經意間的插曲 ~
MainActivity
public class MainActivity extends ActionBarActivity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(this, "哈哈,我成功啓動了!", Toast.LENGTH_LONG).show();
Log.e("AutoRun","哈哈,我成功啓動了!");
}
}
注意要點
-
同設備儘可能只允許一個APP實現開機自啓動的功能,否則倆者應該會有衝突
-
針對Andorid4.0之後需先啓動一次APP纔可收到開機完成的廣播,主要目的是防止惡意程序
-
查看設備是否有360之類的安全軟件,如有:則再軟件請在軟件的自啓動軟件管理中將app設置爲【允許】,重啓手機,測試是否成功
-
查看系統設置裏是否自帶自啓動軟件管理的功能 ,如有:將app設置爲【允許開機啓動】,重啓手機,測試是否成功 ~
針對部分機型的設置方式
-
小米
打開「安全中心」-> 點擊「應用管理」-> 點擊「權限」-> 點擊「自啓動管理」-> 找到「觸動精靈」啓動開關 -
中興/魅族
打開手機設置 -> 滑到底部找到「應用管理」-> 找到並點擊「觸動精靈」-> 點擊「權限管理」-> 打開「自啓動」開關 -
華爲榮耀V8
方法一:點擊「設置」-> 找到並點擊「應用管理」-> 找到觸動精靈點擊「權限」-> 點擊「設置單項權限」-> 點擊開啓「應用自動自動」
方法二:點擊「手機管家」-> 點擊「權限管理」-> 找到觸動精靈點擊「設置單項權限」-> 點擊開啓「應用自動啓動」 -
三星(安裝kingroot)
打開「kingroot」-> 點擊「高級權限管理」-> 點擊「自啓行爲管理」-> 找到觸動精靈啓動服務開關 -
其它手機
通常情況下,自啓動權限開關都在應用管理權限設置中,以上僅列出我方現已知的開啓方式,歡迎大家補充
-
移除任務管理中的app,也稱爲殺掉app的進程,一般就是倆下Home鍵盤或者上滑的等操作可以喚出目前在後天的app進程咯 ~
-
檢查手機是否設置了app安裝首選位置是sd卡,據說安裝到sd卡的話,因爲手機啓動成功後(發送了啓動完成的廣播後)才加載sd卡,所以app接收不到廣播。如果是的話,把app安裝到內部存儲試試。如果不懂得設置的話,那麼直接在AndroidManifest.xml文件中設置安裝路徑,android:installLocation=“internalOnly” - (關於這點未親自嘗試);
如下:
<manifest
package="cn.weixq.autorun"
xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="internalOnly">