android如何實(shí)現(xiàn)開(kāi)機(jī)自動(dòng)啟動(dòng)Service或app

第一步:創(chuàng)建廣播接收者

首先創(chuàng)建一個(gè)廣播接收者,重構(gòu)其抽象方法 onReceive(Context context, Intent intent),在其中啟動(dòng)你想要啟動(dòng)的Service或app。

import android.content.BroadcastReceiver;????

import android.content.Context; import android.content.Intent;

import android.util.Log;??

public class BootBroadcastReceiver extends BroadcastReceiver

{?

??????? //重寫(xiě)onReceive方法 @Override

????? ?public void onReceive(Context context, Intent intent) 、

????? {

??????????? //后邊的XXX.class就是要啟動(dòng)的服務(wù)

??????????? Intent service = new Intent(context,XXXclass);

??????????? context.startService(service);

??????????? Log.v("TAG", "開(kāi)機(jī)自動(dòng)服務(wù)自動(dòng)啟動(dòng)....."); //啟動(dòng)應(yīng)用,參數(shù)為需要自動(dòng)啟動(dòng)的應(yīng)用的包名

???????? ?? Intent intent = getPackageManager().getLaunchIntentForPackage(packageName); ???????????? context.startActivity(intent );

????????}

}

第二步:配置xml文件,在receiver接收這種添加intent-filter配置

<receiver android:name="BootBroadcastReceiver">??
??????????<intent-filter>??
??????????????????<action android:name="android.intent.action.BOOT_COMPLETED"></action>??
??????????????????<category android:name="android.intent.category.LAUNCHER" />??

??????????</intent-filter>???????????????????????????????????????????????????????????????????????????????????????????????????????????????? </receiver>?


第三步:添加權(quán)限

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

失敗原因分析: 接收不到BOOT_COMPLETED廣播可能的原因

(1)、BOOT_COMPLETED對(duì)應(yīng)的action和uses-permission沒(méi)有一起添加

(2)、應(yīng)用安裝到了sd卡內(nèi),安裝在sd卡內(nèi)的應(yīng)用是收不到BOOT_COMPLETED廣播的

(3)、系統(tǒng)開(kāi)啟了Fast Boot模式,這種模式下系統(tǒng)啟動(dòng)并不會(huì)發(fā)送BOOT_COMPLETED廣播

?(4)、應(yīng)用程序安裝后重來(lái)沒(méi)有啟動(dòng)過(guò),這種情況下應(yīng)用程序接收不到任何廣播,包括BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION等等。

Android3.1之后,系統(tǒng)為了加強(qiáng)了安全性控制,應(yīng)用程序安裝后或是(設(shè)置)應(yīng)用管理中被強(qiáng)制關(guān)閉后處于stopped狀態(tài),在這種狀態(tài)下接收不到任何廣播。直到被啟動(dòng)過(guò)(用戶打開(kāi)或是其他應(yīng)用調(diào)用)才會(huì)脫離這種狀態(tài),所以Android3.1之后

(1)、應(yīng)用程序無(wú)法在安裝后自己?jiǎn)?dòng)

(2)、沒(méi)有ui的程序必須通過(guò)其他應(yīng)用激活才能啟動(dòng),如它的Activity、Service、Content Provider被其他應(yīng)用調(diào)用。 存在一種例外,就是應(yīng)用程序被adb push you.apk /system/app/下是會(huì)自動(dòng)啟動(dòng)的,不處于stopped狀態(tài)。


具體說(shuō)明見(jiàn):

http://developer.android.com/about/versions/android-3.1.html#launchcontrols http://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html

(3)、adb發(fā)送BOOT_COMPLETED

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

發(fā)送BOOT_COMPLETED廣播,而不用重啟測(cè)試機(jī)或模擬器來(lái)測(cè)試BOOT_COMPLETED廣播,

這條命令可以更精確的發(fā)送到某個(gè)package,如下:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n package_name/class_name

轉(zhuǎn)自:http://blog.uiuno.com/2017/05/19/android%e5%a6%82%e4%bd%95%e5%ae%9e%e7%8e%b0%e5%bc%80%e6%9c%ba%e8%87%aa%e5%8a%a8%e5%90%af%e5%8a%a8service%e6%88%96app/

最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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