android設備開機廣播收不到怎麼辦

       最近這一段時間,一直在和android板子較勁,雖說開發的時候不管是代碼量還是頁面上,相較於純做軟件的人來說,都少了一些。但扯淡的地方就在於硬件不穩定,不像軟件我寫1就是1,硬件你可以寫的是1,但是結果可能是0。最近做的一個業務上預留了一個靜默升級和開機或者斷電自啓動的功能點。靜默升級已經試驗正確了,等回頭專門寫一個來講述一下,今天說一下開機自啓動,簡單記一下坑。

       首先,開機這個行爲,毫無疑問肯定有個系統廣播,那思路就是我們去在我們的代碼裏來個註冊一個廣播,而且是靜態廣播來搞一下這個事情基本上就好了。下邊來個示例代碼哈,我們去繼承一個BroadcastReceiver ,然後找到固定的action,即獲取到android.intent.action.BOOT_COMPLETED,在裏面做個邏輯判斷即可。

public class BootCompleteReceiver extends BroadcastReceiver {

    public BootCompleteReceiver() {

    }

    //開機接受廣播
    @Override
    public void onReceive(Context context, Intent intent) {

        Logger.d(getClass().getSimpleName(),"開機自啓動廣播");

        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {

            intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());

            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

            context.startActivity(intent);

        }
    }
}

 然後再清單文件中在來一波代碼,採用靜態註冊的方式,這個爲什麼靜態就不說原因了,畢竟都是搬磚的熟人了,哈哈

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

然後一把run,可以測試一波,到此基本上就結束了。下面有幾個小坑給大家說一下,雖說android板子的開發相對來說自由,因爲都是root過的,有最高權限,但是基本的核心邏輯跟軟件還是一樣的。

1.一個小坑就是,在接受到廣播之後,處理開啓APP邏輯的時候,Intent.FLAG_ACTIVITY_NEW_TASK,這個非常重要,一定記得寫啊,要不然程序會掛的。至於clean要不要寫,開心就好。
2.另外一個就是代碼沒問題,廣播也註冊了,可是沒起作用,這個原因有的時候比較奇怪,後來我查了一些小資料,又自己做了一點測試,要是純軟件的話,可以看看手機自啓動權限是不是被設置攔截或者阻止,或者被那啥了,做軟件的應該都懂的。另外一個就是老的手機,或者android板子上,安裝程序優先選在了sd卡上了,要不設置一波,或者直接改一下配置文件,如下圖所示

<manifest
    package="cn.weixq.autorun"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="internalOnly">

     我這開發android板子,的內存卡是外置的,跟老款的手機一樣,就是因爲上述的問題引起的,改了之後,瞬間飛起來,如果還有其它搬磚的朋友有其它問題導致該廣播不起作用,可以留言再交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章