首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >确定安卓通知的addAction点击

确定安卓通知的addAction点击
EN

Stack Overflow用户
提问于 2013-03-12 08:09:01
回答 2查看 77.7K关注 0票数 62

我正在尝试使用新的通知界面。我已经向通知中添加了3个按钮,并且我想在单击每个按钮后将其保存到数据库中。

通知本身运行良好,并在调用时显示,我只是不知道如何捕获三个不同的按钮单击。

我使用BroadcastReceiver来捕捉点击,但我不知道如何判断哪个按钮被点击了。

这是AddAction的代码(我已经排除了通知的其余部分,因为它工作得很好)-

代码语言:javascript
复制
    //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的代码-

代码语言:javascript
复制
 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

EN

回答 2

Stack Overflow用户

发布于 2015-08-09 19:19:13

在我的例子中,在添加了intent-filter之后,它对我有效

代码语言:javascript
复制
 <receiver android:name=".AlarmReceiver">
      <intent-filter>
           <action android:name="YES_ACTION"/>
           <action android:name="NO_ACTION"/>
           <action android:name="MAYBE_ACTION"/>
      </intent-filter>
  </receiver>
票数 11
EN

Stack Overflow用户

发布于 2015-11-14 18:01:37

此处YES_ACTION必须为yourfullpackagename.YES

喜欢

代码语言:javascript
复制
private static final String YES_ACTION = "com.example.packagename.YES";

同样,您也可以使用NO_ACTIONMAYBE_ACTION

在BroadcastReceiver中,您必须使用与上面声明相同YES_ACTION

表示在BroadcastReceiver类中,您可以通过以下方式检查自定义广播

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15350998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档