如何使APP開機(jī)自啟動(dòng)

方案一

將app做成系統(tǒng)應(yīng)用,直接安裝在 system/app 目錄下
具體步驟為:
1.在AndroidManifest文件中,添加

android:sharedUserId="android.uid.system"

例如:
image.png

2.將您的apk直接通過adb命令push到system/app下面,重啟手機(jī)即可

方案二

1.創(chuàng)建一個(gè)廣播接收者

package itbird.com.myapplication33;

import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import java.util.List;

/**
 * Created by xfkang on 2018/5/7.
 */

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null) {
            return;
        }

        Log.d("MyReceiver", intent.getAction());
        if (!isRun(context, "itbird.com.myapplication33")) {
            intent.setClass(context, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    }

    /**
     * 判斷應(yīng)用是否在運(yùn)行
     *
     * @param context
     * @return
     */
    public boolean isRun(Context context, String packagename) {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(100);
        boolean isAppRunning = false;
        //100表示取的最大的任務(wù)數(shù),info.topActivity表示當(dāng)前正在運(yùn)行的Activity,info.baseActivity表系統(tǒng)后臺(tái)有此進(jìn)程在運(yùn)行
        for (ActivityManager.RunningTaskInfo info : list) {
            if (info.topActivity.getPackageName().equals(packagename) || info.baseActivity.getPackageName().equals(packagename)) {
                isAppRunning = true;
                Log.d("ActivityService isRun()", info.topActivity.getPackageName() + " info.baseActivity.getPackageName()=" + info.baseActivity.getPackageName());
                break;
            }
        }
        Log.d("ActivityService isRun()", "com.ad 程序  ...isAppRunning......" + isAppRunning);
        return isAppRunning;
    }
}

2.給receiver配置對(duì)應(yīng)intent-filter

    <receiver android:name=".MyReceiver">
            <intent-filter>
                <action android:name="ITBIRD.TEST.ACTION"/>
            </intent-filter>
    </receiver>

3.添加權(quán)限,缺少這步則無法在Android 3.0及其之前版本上自啟動(dòng)

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

注意
1.由于Android系統(tǒng)在外置SD卡加載前廣播ACTION_BOOT_COMPLETED,于是如果應(yīng)用安裝在外置SD卡上,它無法接收到此廣播

2.FLAG_INCLUDE_STOPPED_PACKAGES的問題,請(qǐng)閱讀《Android應(yīng)用在未啟動(dòng)的情況下接受指定廣播》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容