我正在尝试使用新的通知界面。我已经向通知中添加了3个按钮,并且我想在单击每个按钮后将其保存到数据库中。
通知本身运行良好,并在调用时显示,我只是不知道如何捕获三个不同的按钮单击。
我使用BroadcastReceiver
来捕捉点击,但我不知道如何判断哪个按钮被点击了。
这是AddAction
的代码(我已经排除了通知的其余部分,因为它工作得很好)-
//Yes intent
Intent yesReceive = new Intent();
yesReceive.setAction(CUSTOM_INTENT);
Bundle yesBundle = new Bundle();
yesBundle.putInt("userAnswer", 1);//This is the value I want to pass
yesReceive.putExtras(yesBundle);
PendingIntent pendingIntentYes = PendingIntent.getBroadcast(this, 12345, yesReceive, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.addAction(R.drawable.calendar_v, "Yes", pendingIntentYes);
//Maybe intent
Intent maybeReceive = new Intent();
maybeReceive.setAction(CUSTOM_INTENT);
Bundle maybeBundle = new Bundle();
maybeBundle.putInt("userAnswer", 3);//This is the value I want to pass
maybeReceive.putExtras(maybeBundle);
PendingIntent pendingIntentMaybe = PendingIntent.getBroadcast(this, 12345, maybeReceive, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.addAction(R.drawable.calendar_question, "Partly", pendingIntentMaybe);
//No intent
Intent noReceive = new Intent();
noReceive.setAction(CUSTOM_INTENT);
Bundle noBundle = new Bundle();
noBundle.putInt("userAnswer", 2);//This is the value I want to pass
noReceive.putExtras(noBundle);
PendingIntent pendingIntentNo = PendingIntent.getBroadcast(this, 12345, noReceive, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.addAction(R.drawable.calendar_x, "No", pendingIntentNo);
这是BroadcastReceiver
的代码-
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("shuffTest","I Arrived!!!!");
//Toast.makeText(context, "Alarm worked!!", Toast.LENGTH_LONG).show();
Bundle answerBundle = intent.getExtras();
int userAnswer = answerBundle.getInt("userAnswer");
if(userAnswer == 1)
{
Log.v("shuffTest","Pressed YES");
}
else if(userAnswer == 2)
{
Log.v("shuffTest","Pressed NO");
}
else if(userAnswer == 3)
{
Log.v("shuffTest","Pressed MAYBE");
}
}
}
我已经在清单中注册了BroadcastReceiver
。另外,我想提一下,当我单击通知中的一个按钮时,BroadcastReceiver
就会被调用,但intent总是包含额外的“2”。
这是通知项目is
发布于 2015-08-09 19:19:13
在我的例子中,在添加了intent-filter之后,它对我有效
<receiver android:name=".AlarmReceiver">
<intent-filter>
<action android:name="YES_ACTION"/>
<action android:name="NO_ACTION"/>
<action android:name="MAYBE_ACTION"/>
</intent-filter>
</receiver>
发布于 2015-11-14 18:01:37
此处YES_ACTION
必须为yourfullpackagename.YES
喜欢
private static final String YES_ACTION = "com.example.packagename.YES";
同样,您也可以使用NO_ACTION
或MAYBE_ACTION
在BroadcastReceiver中,您必须使用与上面声明相同YES_ACTION
,
表示在BroadcastReceiver类中,您可以通过以下方式检查自定义广播
public class NotificationReceiver extends BroadcastReceiver {
private static final String YES_ACTION = "com.example.packagename.YES";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if(YES_ACTION.equals(action)) {
Toast.makeText(context, "CALLED", Toast.LENGTH_SHORT).show();
}
}
}
注意:在YES_ACTION字符串中不使用YES,您也可以使用other word。
https://stackoverflow.com/questions/15350998
复制相似问题