在android中自定义通知中处理三个按钮单击事件

时间:2014-02-20 15:09:24

标签: android android-notifications buttonclick

我有三个按钮的自定义通知(“确定”,“取消”,“稍后”) 只有当有一个按钮时,我才能捕获点击事件,但是使用三个按钮我无法知道它们中的哪个按钮被点击。 我的问题是“如何知道点击了哪个按钮?”

// 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函数中实现), 但我希望他们每个人都有不同的结果。

请提前帮助我

3 个答案:

答案 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()并执行任务