我正在发送一个通知,其中有2个操作按钮,分别是“接受”和“拒绝”。
我正在遵循这个Github repo。
当用户点击“接受”时,会检查某些条件,并相应地执行逻辑。
更新2.0-问题在于,点击“接受”按钮后,操作成功进行,但通知未从状态栏消失,因为此处生成的id:
我正在遵循这个Github repo。
当用户点击“接受”时,会检查某些条件,并相应地执行逻辑。
更新2.0-问题在于,点击“接受”按钮后,操作成功进行,但通知未从状态栏消失,因为此处生成的id:
m =(new Random()).nextInt(10000); 与此处不同:actionIntent.putExtra(“id”,NotificationARBroadcastReceiver.m); 每次都不同!
以下是通知的代码:
Intent notificationIntent = new Intent(getBaseContext(), NotificationARBroadcastReceiver.class);
notificationIntent.putExtra(NotificationARBroadcastReceiver.NOTIFICATION, getNotificationNewRequestService());
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), m, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 0, pendingIntent);
这里是getNotificationNewRequestService()
:
private Notification getNotificationNewRequestService() {
mBuilder =
new NotificationCompat.Builder(getBaseContext())
.setSmallIcon(R.mipmap.app_icon_1)
.setContentTitle("Title")
.setContentText("text...");
Intent resultIntent = new Intent(getBaseContext(), Profile.class);
PendingIntent resultPendingIntent =
PendingIntent.getActivity(
getBaseContext(),
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
// for action button
Intent actionIntent = new Intent(getBaseContext(), MyBroadcastSender.class);
actionIntent.putExtra("id", NotificationARBroadcastReceiver.m);
PendingIntent actionPendingIntent = PendingIntent
.getBroadcast(getBaseContext(),
0, actionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setAutoCancel(true);
mBuilder.setContentIntent(resultPendingIntent);
mBuilder.addAction(R.drawable.ic_accepted_request_black_24dp, "Accept", actionPendingIntent);
mBuilder.addAction(R.drawable.ic_close_black_24dp, "Reject", null);
return mBuilder.build();
}
这是 NotificationARBroadcastReceiver.java
文件:
public class NotificationARBroadcastReceiver extends BroadcastReceiver {
public static String NOTIFICATION = "notification";
public static NotificationManager mNotifyMgr;
public static int m;
@Override
public void onReceive(Context context, Intent intent) {
m = (new Random()).nextInt(10000);
Log.d("mMain", String.valueOf(m));
mNotifyMgr =
(NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
Notification notification = intent.getParcelableExtra(NOTIFICATION);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
mNotifyMgr.notify(m, notification);
}
}
这是MyBroadcastSender.java
文件:
public class MyBroadcastSender extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Broadcast Received by MyBroadcastSender.", Toast.LENGTH_SHORT).show();
int id = intent.getIntExtra("id", 1);
// send back to your class
Intent newIntent = new Intent();
newIntent.setAction(context.getString(R.string.broadcast_id));
newIntent.putExtra("id1", id);
context.sendBroadcast(newIntent);
context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
Toast.makeText(context, "Broadcast sent back.", Toast.LENGTH_SHORT).show();
}
}
这是MyBroadcastReceiver.java
文件:
// BroadcastReceiver
public class MyBroadcastReceiver extends BroadcastReceiver {
public MyBroadcastReceiver(){
super();
}
@Override public void onReceive(Context context, Intent intent) {
int id2 = intent.getIntExtra("id1", 1);
if (intent.getAction() != null && intent.getAction().equals(getString(R.string.broadcast_id))) {
NotificationARBroadcastReceiver.mNotifyMgr.cancel(id2);
Intent intent1 = new Intent(MyService.this, MainActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent1);
Toast.makeText(context, "Broadcast received by MyBroadcastReceiver. Now, you can perform actions.",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "Intent is null.", Toast.LENGTH_SHORT).show();
}
}
}
在getNotificationNewRequestService()
中,我将通知ID作为额外信息放入"id"
中,然后在MyBroadcastSender.java
中,我将其作为int id = intent.getIntExtra("id", 1);
获取,然后再次放入newIntent.putExtra("id1", id);
,最后在MyBroadcastReceiver.java
中获取它作为int id2 = intent.getIntExtra("id1", 1);
,并尝试使用它作为NotificationARBroadcastReceiver.mNotifyMgr.cancel(id2);
来删除通知。
很抱歉这么多代码,但它们都是必要的。
我想知道的是:如何将同一通知ID从NotificationARBroadcastReceiver.java
(这是一个单独的java文件)传递到MyBroadcastReceiver
(这是MyService.java
中的内部类)?
更新1.0-当我打印出m
、mMain
、id
和id1
的值时,发生了什么:
D/m: 0
D/mMain: 9994
D/id: 0
D/id1: 0
m
,id
,id1
和id2
。 - rupinderjeet