我的接收者没有收到意图
My receiver don't receive the intent
我遇到了这个问题:我为 alarmManager 设置了 intent 和 pendingintent,如果满足某些条件,则在 intent 中添加一些额外内容。
问题是我的接收器没有读取我的附加信息:
在 MainActivity 中设置 alarmManager:
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this , 0, i, PendingIntent.FLAG_ONE_SHOT);
// conditions
i.putExtra("type", 1);
i.putExtra("mealType", 2);
Log.d(TAG , "type: " + i.getExtras().getInt("type"));
Log.d(TAG , "mealtype: " + i.getExtras().getInt("mealType"));
calendar.set(calendar.HOUR_OF_DAY, 7);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
在 logcat 中我可以看到:
D/MAIN: type: 1
D/MAIN: mealtype: 2
但在我的接收器中:
public void onReceive(Context context, Intent intent) {
/**
* Receiver
*/
Log.d(TAG, "Allarme ricevuto dal receiver");
int type = intent.getExtras().getInt("type");
Log.d(TAG , "type: " + type);
Log.d(TAG , "mealtype: " + intent.getExtras().getInt("mealType"));
Log.d(TAG , "unExisted: " + intent.getExtras().getInt("unExisted"));
if(type == 0){
Intent service = new Intent(context, AlarmService.class);
service.putExtra("type", type);
context.startService(service);
}
if(type == 1){
int mealType = intent.getExtras().getInt("mealType");
Intent service1 = new Intent(context, AlarmService.class);
service1.putExtra("type", type);
service1.putExtra("mealType", mealType);
context.startService(service1);
}
}
我看到了这个:
D/ALARM RECEIVER: Allarme ricevuto dal receiver
D/ALARM RECEIVER: type: 0
D/ALARM RECEIVER: mealtype: 0
D/ALARM RECEIVER: unExisted: 0
我看到所有的键都为 0,也看到为 0 "unExistest",我从来没有在意图中插入这个键。为什么?
您需要在创建 PendingIntent
之前设置 Intent
extras。
示例:
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(MainActivity.this, AlarmReceiver.class);
i.putExtra("type", 1);
i.putExtra("mealType", 2);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this , 0, i, PendingIntent.FLAG_ONE_SHOT);
calendar.set(calendar.HOUR_OF_DAY, 7);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
我遇到了这个问题:我为 alarmManager 设置了 intent 和 pendingintent,如果满足某些条件,则在 intent 中添加一些额外内容。 问题是我的接收器没有读取我的附加信息:
在 MainActivity 中设置 alarmManager:
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this , 0, i, PendingIntent.FLAG_ONE_SHOT);
// conditions
i.putExtra("type", 1);
i.putExtra("mealType", 2);
Log.d(TAG , "type: " + i.getExtras().getInt("type"));
Log.d(TAG , "mealtype: " + i.getExtras().getInt("mealType"));
calendar.set(calendar.HOUR_OF_DAY, 7);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
在 logcat 中我可以看到:
D/MAIN: type: 1
D/MAIN: mealtype: 2
但在我的接收器中:
public void onReceive(Context context, Intent intent) {
/**
* Receiver
*/
Log.d(TAG, "Allarme ricevuto dal receiver");
int type = intent.getExtras().getInt("type");
Log.d(TAG , "type: " + type);
Log.d(TAG , "mealtype: " + intent.getExtras().getInt("mealType"));
Log.d(TAG , "unExisted: " + intent.getExtras().getInt("unExisted"));
if(type == 0){
Intent service = new Intent(context, AlarmService.class);
service.putExtra("type", type);
context.startService(service);
}
if(type == 1){
int mealType = intent.getExtras().getInt("mealType");
Intent service1 = new Intent(context, AlarmService.class);
service1.putExtra("type", type);
service1.putExtra("mealType", mealType);
context.startService(service1);
}
}
我看到了这个:
D/ALARM RECEIVER: Allarme ricevuto dal receiver
D/ALARM RECEIVER: type: 0
D/ALARM RECEIVER: mealtype: 0
D/ALARM RECEIVER: unExisted: 0
我看到所有的键都为 0,也看到为 0 "unExistest",我从来没有在意图中插入这个键。为什么?
您需要在创建 PendingIntent
之前设置 Intent
extras。
示例:
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(MainActivity.this, AlarmReceiver.class);
i.putExtra("type", 1);
i.putExtra("mealType", 2);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this , 0, i, PendingIntent.FLAG_ONE_SHOT);
calendar.set(calendar.HOUR_OF_DAY, 7);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);