2011-01-08 93 views
4

有誰知道爲什麼我的應用程序仍然收到ACTION_BOOT_COMPLETED廣播,即使我的應用程序在清單文件中沒有權限android.permission.RECEIVE_BOOT_COMPLETED?我認爲這是必需的,但我用過的一些教程也沒有。有幾個。我使用我的手機運行CyanogenMod進行測試,但我懷疑這一點。每次啓動時,LogCat顯示我的「啓動通知」日誌。請參閱下面的代碼使用。是不是android.permission.RECEIVE_BOOT_COMPLETED不需要?

AndroidManifest.xml中

<receiver android:name="AlarmReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    <category android:name="android.intent.category.HOME" /> 
    </intent-filter> 
    </receiver> 

AlarmReceiver類

public class AlarmReceiver extends BroadcastReceiver { 
    private static final String TAG = "MyProgram"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    try { 
      if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { 
    Log.d(TAG, "Notified of boot"); 
      } 
      Intent newIntent = new Intent(context, MyService.class); 
      context.startService(newIntent); 
    } catch (Exception e) { 
    Log.d(TAG, "An alarm was received but there was an error"); 
    e.printStackTrace(); 
    } 
    } 
    } 

我重新審視這個仿真器上,併成功地在Android 2.1,2.2和2.3再現了 「問題」。我得到一個ANR(按預期),因爲模擬器沒有數據庫我的應用程序查詢。當我從清單中刪除所有已聲明的用戶權限時,我在嘗試使用我的應用程序時遇到了期望的權限拒絕錯誤。不過,我仍然收到啓動時廣播的ACTION_BOOT_COMPLETED意圖。有什麼建議麼?

+0

「我用我的手機運行CyanogenMod進行測試,但我懷疑這個問題」 - 不要那麼確定。總是對至少一個運行Android的仿真器測試這種異常情況,以確認它不是該ROM的東西。這不是敲響Cyanogen - 如果您在HTC或摩托羅拉設備上出現相同症狀,我會提出相同的建議。 – CommonsWare 2011-01-08 19:09:11

+0

@CommonsWare:真的。不幸的是,我的應用使用了仿真器中不可用的功能。我會借用某人的設備繼續嘗試排除當前的環境。感謝您的建議。 – capitalf 2011-01-08 21:53:06

回答

7

這似乎是Android中的一個錯誤。我可以在普通的Nexus One和Nexus S硬件上重現問題。我已經提交了一份bug report

相關問題