原文地址:Android 實現開機自啟APP - Stars-One的雜貨小窩 公司有個項目,需要實現自啟動的功能,本來想著是設置桌面啟動器的方式去實現,但是設備是華為平板(EMUI系統),不允許設置第三方桌面 且監聽開機廣播也無效,本來以為沒法實現了,沒想到公司的另一款APP確實支持,於是便是研究 ...
原文地址: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以上估計都要申請懸浮窗許可權才能實現
同事的手機是鴻蒙系統,加了懸浮窗還是無法自啟
註意:
華為手機或平板都需要去設置應用的啟動管理,其他系統可參考此設置
提問之前,請先看提問須知 點擊右側圖標發起提問 或者加入QQ群一起學習 TornadoFx學習交流群:1071184701