首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 開機自啟動 BroadcastReceiver 崩潰排查:包名拼寫錯誤導致

     編輯:程式設計綜合問答

實現開機自啟動時,BroadcastReceiver 收到 BOOT_COMPLETED 廣播啟動 Service,卻提示「很抱歉,程式已停止運行」,而手動啟動 App 正常。經排查為 AndroidManifest.xml 中 Receiver 類完整包名拼寫錯誤。

問題代碼

<receiver android:name=".MyBroadcastReceive"> <!-- 錯誤:假設包名為 com.example.app,實際類在 com.example.app.receiver -->
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

正確配置

<receiver android:name="com.example.app.receiver.MyBroadcastReceive"> <!-- 必須寫完整包名,或確保類在 manifest package 同級目錄 -->
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

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

核心檢查清單

  1. 完整類名:android:name 必須是完整包名 + 類名(如 com.pkg.MyReceiver),或以點開頭表示同包下(.MyReceiver),但類必須確實在該包下。
  2. 權限聲明:RECEIVE_BOOT_COMPLETED 權限不可漏。
  3. 導出屬性:Android 8.0+ 需顯式設置 android:exported="true"(接收系統廣播必須導出)。
  4. Service 存在性:啟動的 WatchDogService 類需存在且在 Manifest 註冊。

調試技巧

  • 使用 adb shell am broadcast -a android.intent.action.BOOT_COMPLETED 模擬開機廣播,無需重啟手機即可驗證 Receiver 邏輯。
  • Logcat 過濾 BootReceiver 標籤,查看 onReceive 是否執行、是否拋出異常。

問題解決確認圖

Manifest 配置錯誤是組件無法啟動的首要原因,開發時建議用「複製完整類名」功能避免手寫拼寫錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved