我有三个按钮的自定义通知(“确定”,“取消”,“稍后”) 只有当有一个按钮时,我才能捕获点击事件,但是使用三个按钮我无法知道它们中的哪个按钮被点击。 我的问题是“如何知道点击了哪个按钮?”
// I use this code in My "createNotification" function to add event to buttons
Intent intent = new Intent(Context.NOTIFICATION_SERVICE);
PendingIntent pendinghomeIntent =
PendingIntent.getBroadcast(getBaseContext(), 0, intent, 0);
notificationView.setOnClickPendingIntent(R.id.okButt, pendingrecentAppIntent);
notificationView.setOnClickPendingIntent(R.id.cancelButt, pendingrecentAppIntent);
notificationView.setOnClickPendingIntent(R.id.laterButt, pendingrecentAppIntent);
我想要一项服务来注册和取消注册广播接收器,这在一个按钮的情况下完美无缺。 使用这三个按钮,当我点击它们时,会发生相同的结果(在onReceive函数中实现), 但我希望他们每个人都有不同的结果。
请提前帮助我
答案 0 :(得分:2)
您需要为每个按钮使用单独的PendingIntents
(由Intents
制作,具有不同的操作)。稍后在onReceive()
,您只需检查传入的Intent
&根据它执行不同的代码。
答案 1 :(得分:1)
正如Sam所说,“你需要为每个按钮使用单独的PendingIntents(由Intents制作,具有不同的动作)。” 我发现我必须为每个按钮使用单独的PendingIntents,但“不同动作”的概念对我不起作用。我使用setOnClickPendingIntent的第二个参数来区分三个PendingIntents,并使用FLAG_UPDATE_CURRENT作为第四个参数。 我的代码是
Intent homeIntent = new Intent(Context.NOTIFICATION_SERVICE);
Bundle yesBundle = new Bundle();
yesBundle.putInt("userAnswer", 1);
homeIntent.putExtras(yesBundle);
PendingIntent pendinghomeIntent =
PendingIntent.getBroadcast(getBaseContext(), 0, homeIntent, PendingIntent.FLAG_UPDATE_CURRENT);
notificationView.setOnClickPendingIntent(R.id.homeButt, pendinghomeIntent);
Intent recentAppIntent = new Intent(Context.NOTIFICATION_SERVICE);
Bundle recentAppBundle = new Bundle();
recentAppBundle.putInt("userAnswer", 2);
recentAppIntent.putExtras(recentAppBundle);
PendingIntent pendingrecentAppIntent =
PendingIntent.getBroadcast(getBaseContext(), 1, recentAppIntent, PendingIntent.FLAG_UPDATE_CURRENT);
notificationView.setOnClickPendingIntent(R.id.recentAppButt, pendingrecentAppIntent);
Intent settingsIntent = new Intent(Context.NOTIFICATION_SERVICE);
Bundle settingsBundle = new Bundle();
settingsBundle.putInt("userAnswer", 3);
settingsIntent.putExtras(settingsBundle);
PendingIntent pendingsettingsIntent =
PendingIntent.getBroadcast(getBaseContext(), 2, settingsIntent, PendingIntent.FLAG_UPDATE_CURRENT);
notificationView.setOnClickPendingIntent(R.id.settingsButt, pendingsettingsIntent);
notificationManager.notify(1, notification);
和onReceive()代码是
public void onReceive(Context context, Intent intent) {
Bundle answerBundle = intent.getExtras();
int userAnswer = answerBundle.getInt("userAnswer");
if(userAnswer == 1) {
Log.v("shuffTest","Pressed Home");
}else if(userAnswer == 2) {
Log.v("shuffTest","Pressed Recent App");
}else if(userAnswer == 3) {
Log.v("shuffTest","Pressed Settings");
}
}
答案 2 :(得分:0)
在两天之前,我遇到了同样的问题,我发现我没有为每个未决的意图指定单独的行动,例如
Intent recentApIntent = new Intent(Context.NOTIFICATION_SERVICE);
recentApIntent.setAction("Action 1");
Bundle recentAppBundle = new Bundle();
recentAppBundle.putInt("userAnswer", 2);
recentAppIntent.putExtras(recentAppBundle);
PendingIntent pendingrecentAppIntent =
PendingIntent.getBroadcast(getBaseContext(), 1, recentAppIntent, PendingIntent.FLAG_UPDATE_CURRENT);
notificationView.setOnClickPendingIntent(R.id.recentAppButt, pendingrecentAppIntent);
同样将每个意图与动作分开,并在接收广播时识别intent.getAction()并执行任务