是不是需要android.permission.RECEIVE_BOOT_COMPLETED?

时间:2011-01-08 18:13:12

标签: android broadcastreceiver boot

有人知道为什么我的应用程序仍然收到ACTION_BOOT_COMPLETED广播,即使我的应用程序在清单文件中没有权限android.permission.RECEIVE_BOOT_COMPLETED吗?我认为这是必需的,但我使用的一些教程也没有。一些人做了。我用我的手机运行CyanogenMod进行测试,但我怀疑这很重要。 LogCat在每次启动时显示我的“Notified of boot”日志。请参阅下面的代码。

的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意图。有什么建议吗?

1 个答案:

答案 0 :(得分:7)

这似乎是Android中的一个错误。我可以在普通的Nexus One和Nexus S硬件上重现这个问题。我已经提交了bug report