Android 實現開機自啟APP

one發表於2022-05-31

原文地址:Android 實現開機自啟APP - Stars-One的雜貨小窩

公司有個專案,需要實現自啟動的功能,本來想著是設定桌面啟動器的方式去實現,但是裝置是華為平板(EMUI系統),不允許設定第三方桌面

且監聽開機廣播也無效,本來以為沒法實現了,沒想到公司的另一款APP確實支援,於是便是研究了下,發現監聽開機廣播的方式,還需要加上個懸浮窗許可權即可實現功能

然後也是趁著機會來總結下

方法1(啟動頁)

在AndroidMainfest中,將首頁的Activity設定一下屬性即可

<activity
    android:name=".MainActivity"
    android:exported="true">
    <intent-filter>
        <category android:name="android.intent.category.HOME" />
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

方法2(監聽開機廣播)

使用靜態廣播實現自啟功能

1.廣播及許可權宣告

AndroidManifest檔案中宣告許可權:

<!--    開機監聽-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--    懸浮窗-->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

宣告廣播:

<receiver
    android:name=".AutoStartReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="1000">
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

2.廣播類實現

AutoStartReceiver類程式碼實現:

public class AutoStartReceiver extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {
        //開機啟動
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent thisIntent = new Intent(context, MainActivity.class);//設定要啟動的app
            thisIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(thisIntent);
        }
    }
}

3.懸浮窗許可權申請

在主Activity裡申請懸浮窗許可權

//檢查是否已經授予許可權,大於6.0的系統適用,小於6.0系統預設開啟,無需理會
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
    //沒有許可權,須要申請許可權,由於是開啟一個受權頁面,因此拿不到返回狀態的,因此建議是在onResume方法中重新執行一次校驗
    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
    intent.setData(Uri.parse("package:" + getPackageName()));
    startActivity(intent);
}

測試補充

測試時候需要注意,使用這種方法,都是需要啟動一次APP,之後自啟才會實現

手中有臺Android11的裝置,測試發現不加懸浮窗,也是無法在開機後啟動APP

而華為平板裡的系統是Android10,所以斷定Android 10以上估計都要申請懸浮窗許可權才能實現

同事的手機是鴻蒙系統,加了懸浮窗還是無法自啟

注意:
華為手機或平板都需要去設定應用的啟動管理,其他系統可參考此設定

相關文章