4

android.permission.RECEIVE_BOOT_COMPLETED私のアプリがマニフェスト ファイルにアクセス許可を持っていない場合でも、私のアプリケーションがまだ ACTION_BOOT_COMPLETED ブロードキャストを受信する理由を知っている人はいますか? 必須だと思っていましたが、使用したいくつかのチュートリアルにもありませんでした。いくつかはそうしました。テスト用に CyanogenMod を実行している携帯電話を使用していますが、それが問題になるとは思えません。LogCat は、起動のたびに「起動の通知」ログを表示します。使用するコードについては、以下を参照してください。

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 インテントをまだ受け取ります。助言がありますか?

4

1 に答える 1

7

これは Android のバグのようです。通常の Nexus One と Nexus S ハードウェアで問題を再現できます。私はそれについてバグレポートを提出しました。

于 2011-01-15T23:40:42.280 に答える