Android進階之路 - 開機自啓動

經我寫Demo測試之後驗證了Andorid5.0左右的售貨機設備、Android9.0的測試手機都可以實現開機自啓動的功能,要注意在篇中代碼之外記得允許目標應用自動啓動 ~

核心:開機自啓動的實現主要在於 android.permission.RECEIVE_BOOT_COMPLETED 這條開機廣播

如果是新手不瞭解四大組件之一廣播使用的話, 可以來這補補課 ~ 主要介紹了一些廣播的基礎知識 ~

2020.5.20 一生一次,領證的人會不會爆棚啊 ~

加入權限

<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","哈哈,我成功啓動了!");
    }
}

注意要點

  1. 同設備儘可能只允許一個APP實現開機自啓動的功能,否則倆者應該會有衝突

  2. 針對Andorid4.0之後需先啓動一次APP纔可收到開機完成的廣播,主要目的是防止惡意程序

  3. 查看設備是否有360之類的安全軟件,如有:則再軟件請在軟件的自啓動軟件管理中將app設置爲【允許】,重啓手機,測試是否成功

  4. 查看系統設置裏是否自帶自啓動軟件管理的功能 ,如有:將app設置爲【允許開機啓動】,重啓手機,測試是否成功 ~

針對部分機型的設置方式

  • 小米
    打開「安全中心」-> 點擊「應用管理」-> 點擊「權限」-> 點擊「自啓動管理」-> 找到「觸動精靈」啓動開關

  • 中興/魅族
    打開手機設置 -> 滑到底部找到「應用管理」-> 找到並點擊「觸動精靈」-> 點擊「權限管理」-> 打開「自啓動」開關

  • 華爲榮耀V8
    方法一:點擊「設置」-> 找到並點擊「應用管理」-> 找到觸動精靈點擊「權限」-> 點擊「設置單項權限」-> 點擊開啓「應用自動自動」
    方法二:點擊「手機管家」-> 點擊「權限管理」-> 找到觸動精靈點擊「設置單項權限」-> 點擊開啓「應用自動啓動」

  • 三星(安裝kingroot)
    打開「kingroot」-> 點擊「高級權限管理」-> 點擊「自啓行爲管理」-> 找到觸動精靈啓動服務開關

  • 其它手機
    通常情況下,自啓動權限開關都在應用管理權限設置中,以上僅列出我方現已知的開啓方式,歡迎大家補充

  1. 移除任務管理中的app,也稱爲殺掉app的進程,一般就是倆下Home鍵盤或者上滑的等操作可以喚出目前在後天的app進程咯 ~

  2. 檢查手機是否設置了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">
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章