私はBootReceiverを持っていて、アンドロイド.intent.action.BOOT_COMPLETEDを使用して、電話機の電源が切れる前に、ユーザーがアプリで行ったアラームを再設定します。Android、BOOT_COMPLETEDインテントを使用したアクセス拒否
私はAlarmManagerを使用してアラームを再度設定します。アラームはSQLiteデータベースに保存されます。
public class BootReceiver extends BroadcastReceiver {
private Context mContext;
@Override
public void onReceive(Context c, Intent intent) {
mContext = c;
try {
cursor.moveToFirst();
do {
Intent i = new Intent(mContext, AlarmReceiver.class);
i.putExtra("alarm_message", cursor.getInt(1));
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, (int)System.currentTimeMillis(), intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cursor.getLong(4), pendingIntent);
Log.e("DB", "Future alarms was set after reboot");
} while (cursor.moveToNext());
} catch (Exception e1) {
Log.e("DB", "DB is empty");
}
cursor.close();
しかし、アラームが発生しようとしているとき、logcatは私にこれを与える:
Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=-1, uid=10067
Unable to send startActivity intent
W/ActivityManager(1584): java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=-1, uid=10067
02-19 23:42:26.989: W/ActivityManager(1584): at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:10310)
02-19 23:42:26.989: W/ActivityManager(1584): at com.android.server.am.ActivityManagerService.broadcastIntentInPackage(ActivityManagerService.java:10587)
02-19 23:42:26.989: W/ActivityManager(1584): at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:228)
02-19 23:42:26.989: W/ActivityManager(1584): at com.android.server.am.PendingIntentRecord.send(PendingIntentRecord.java:177)
02-19 23:42:26.989: W/ActivityManager(1584): at android.app.PendingIntent.send(PendingIntent.java:400)
02-19 23:42:26.989: W/ActivityManager(1584): at com.android.server.AlarmManagerService$AlarmThread.run(AlarmManagerService.java:692)
これまでのところ、私は私のAlarmReceiver.classで持っている唯一のものがある:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("AlarmReceiver", "Alarm received");
私はすべての適切な許可を持っています
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
とレシーバを設定します。
<receiver android:name=".AlarmReceiver"></receiver>
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
私は大成功との間に、こののexampelsを見てきましたが、それPermisson拒否を取り除くことはできません。私は何が欠けていますか?上記getBroadcast(...)
の三番目のパラメータを見て - あなたのBootReceiver
あなたがPendingIntent
を作成し、それをonReceive(...)
によって受信されIntent
を渡しているに
はい、何らかの理由でreceived_bootインテントを再ブロードキャストしています。これはシステムインテントであるため、エラーが発生しています。 – Peterdk
優秀!あなたはもちろん、私とインテントを置き換えて、それを解決しました。 –
@Jakob:喜んで助けてください。 – Squonk