尽管有标志,但 pendingIntent 不发送额外内容
pendingIntent not sending extras, despite the flags
尽管我在意图或 pendingIntent 本身中放置了标志,但我的 pendingIntent 没有为服务带来额外的东西。
DrawerActivity.class:
@Override
public void registerAlarmTask(Calendar time, String title, int iconId) {
int requestId = (int) System.currentTimeMillis();
Intent intent = new Intent(this, AlarmReceiver.class);
intent.putExtra("title",title);
intent.putExtra("icon", iconId);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.setAction("alarm");
PendingIntent pIntent = PendingIntent.getBroadcast(this, requestId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar newTime = Calendar.getInstance();
newTime.set(Calendar.MINUTE, time.get(Calendar.MINUTE)-1);
alarm.set(AlarmManager.RTC_WAKEUP, newTime.getTimeInMillis(), pIntent);
Log.w(TAG, "Alarm created! " + newTime.toString());
}
以及来自 NotificationService 的 StartCommand 方法:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
NotificationCompat.Builder nBuilder = new NotificationCompat.Builder(this);
Log.w(TAG, "Icon ID: " + intent.getIntExtra("icon", 404) + " / Title: " + intent.getStringExtra("title"));
nBuilder.setSmallIcon(intent.getIntExtra("icon", R.drawable.ic_event_new));
nBuilder.setContentTitle(intent.getStringExtra("title"));
nBuilder.setContentText("A partida irá começar em instantes...");
nBuilder.setTicker("Sua partida no Destiny está prestes a começar!");
nBuilder.setAutoCancel(true);
NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nManager.notify(0, nBuilder.build());
Log.w(TAG, "Notification Service started!");
Toast.makeText(this, "Notification Service started!", Toast.LENGTH_SHORT).show();
return super.onStartCommand(intent, flags, startId);
}
无论我放置的 requestId、intent 标志或 pendingIntent 标志,来自 intent 的额外信息始终为 null。
有什么地方做错了吗?我搜索了很多,但没有找到答案。
此致,
卢卡斯塞内
就像 Mike M. 在评论中所说的那样,我只是忘记将 Intent extra 从 BroadcastReceiver 传递到服务。是的,一个愚蠢的错误...
感谢所有评论!
尽管我在意图或 pendingIntent 本身中放置了标志,但我的 pendingIntent 没有为服务带来额外的东西。
DrawerActivity.class:
@Override
public void registerAlarmTask(Calendar time, String title, int iconId) {
int requestId = (int) System.currentTimeMillis();
Intent intent = new Intent(this, AlarmReceiver.class);
intent.putExtra("title",title);
intent.putExtra("icon", iconId);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.setAction("alarm");
PendingIntent pIntent = PendingIntent.getBroadcast(this, requestId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar newTime = Calendar.getInstance();
newTime.set(Calendar.MINUTE, time.get(Calendar.MINUTE)-1);
alarm.set(AlarmManager.RTC_WAKEUP, newTime.getTimeInMillis(), pIntent);
Log.w(TAG, "Alarm created! " + newTime.toString());
}
以及来自 NotificationService 的 StartCommand 方法:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
NotificationCompat.Builder nBuilder = new NotificationCompat.Builder(this);
Log.w(TAG, "Icon ID: " + intent.getIntExtra("icon", 404) + " / Title: " + intent.getStringExtra("title"));
nBuilder.setSmallIcon(intent.getIntExtra("icon", R.drawable.ic_event_new));
nBuilder.setContentTitle(intent.getStringExtra("title"));
nBuilder.setContentText("A partida irá começar em instantes...");
nBuilder.setTicker("Sua partida no Destiny está prestes a começar!");
nBuilder.setAutoCancel(true);
NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nManager.notify(0, nBuilder.build());
Log.w(TAG, "Notification Service started!");
Toast.makeText(this, "Notification Service started!", Toast.LENGTH_SHORT).show();
return super.onStartCommand(intent, flags, startId);
}
无论我放置的 requestId、intent 标志或 pendingIntent 标志,来自 intent 的额外信息始终为 null。
有什么地方做错了吗?我搜索了很多,但没有找到答案。
此致, 卢卡斯塞内
就像 Mike M. 在评论中所说的那样,我只是忘记将 Intent extra 从 BroadcastReceiver 传递到服务。是的,一个愚蠢的错误...
感谢所有评论!