4

私はPendingIntentsを使用してアクションボタンからアクティビティを起動できることを知っています。ユーザーが通知アクションボタンをクリックしたときにメソッドが呼び出されるようにするにはどうすればよいですか?Android - 通知アクションボタンからメソッドを呼び出す

public static void createNotif(Context context){ 
    ... 
    drivingNotifBldr = (NotificationCompat.Builder) new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.steeringwheel) 
      .setContentTitle("NoTextZone") 
      .setContentText("Driving mode it ON!") 
      //Using this action button I would like to call logTest 
      .addAction(R.drawable.smallmanwalking, "Turn OFF driving mode", null) 
      .setOngoing(true); 
    ... 
} 

public static void logTest(){ 
    Log.d("Action Button", "Action Button Worked!"); 
} 

答えて

8

アクションボタンをクリックしてもメソッドを直接呼び出すことはできません。

これを実行するには、BroadcastReceiverまたはServiceでPendingIntentを使用する必要があります。次に、BroadcastRecieverを使用したPendingIntentの例を示します。

まず通知今

public static void createNotif(Context context){ 

    ... 
    //This is the intent of PendingIntent 
    Intent intentAction = new Intent(context,ActionReceiver.class); 

    //This is optional if you have more than one buttons and want to differentiate between two 
    intentAction.putExtra("action","actionName"); 

    pIntentlogin = PendingIntent.getBroadcast(context,1,intentAction,PendingIntent.FLAG_UPDATE_CURRENT); 
    drivingNotifBldr = (NotificationCompat.Builder) new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.steeringwheel) 
      .setContentTitle("NoTextZone") 
      .setContentText("Driving mode it ON!") 
      //Using this action button I would like to call logTest 
      .addAction(R.drawable.smallmanwalking, "Turn OFF driving mode", pIntentlogin) 
      .setOngoing(true); 
    ... 

} 

に構築することができます。この意図

public class ActionReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     //Toast.makeText(context,"recieved",Toast.LENGTH_SHORT).show(); 

     String action=intent.getStringExtra("action"); 
     if(action.equals("action1")){ 
      performAction1(); 
     } 
     else if(action.equals("action2")){ 
      performAction2(); 

     } 
     //This is used to close the notification tray 
     Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 
     context.sendBroadcast(it); 
    } 

    public void performAction1(){ 

    } 

    public void performAction2(){ 

    } 

} 

<receiver android:name=".ActionReceiver"></receiver> 
マニフェスト
にブロードキャストレシーバーを宣言いたしますレシーバ

希望します。

+0

ありがとう、これは多くの意味があります。しかし、私は 'intentAction'を' addAction'に渡した理由についてちょっと混乱しています。それは 'pIntentlogin'でしょうか? –

+0

が更新されました。私の悪い! :) –

+0

ありがとうございました! –

関連する問題