2017-07-20 6 views
0

gedrückt wird Unten ist mein Code. Ich habe Maßnahmen gesetzt (ja oder nein) mit AddAction zum notification.But ist das Problem, das ich nicht erkennen kann, wenn sie gedrückt oder .. Danke not.Plz zu helfenWie erkennen, ob ja oder nein in Notification Android

@SuppressWarnings("deprecation") 
@Override 
protected void onIncomingCallReceived(final Context ctx, final String number, final Date start) { 
    // Create Intent for notification 
    Intent intent = new Intent(ctx, CallReceiver.class); 
    PendingIntent pi = PendingIntent.getActivity(ctx, 0, intent, 
      PendingIntent.FLAG_UPDATE_CURRENT); 

    //Yes intent 
    Intent yesReceive = new Intent(); 
    yesReceive.setAction(YES_ACTION); 
    PendingIntent pendingIntentYes = PendingIntent.getBroadcast(ctx, 0, yesReceive, PendingIntent.FLAG_UPDATE_CURRENT); 


    //No intent 
    Intent noReceive = new Intent(); 
    noReceive.setAction(NO_ACTION); 
    PendingIntent pendingIntentNo = PendingIntent.getBroadcast(ctx, 0, noReceive, PendingIntent.FLAG_UPDATE_CURRENT); 


    // Defining notification 
    NotificationCompat.Builder nBuilder = new NotificationCompat.Builder(
      ctx).setSmallIcon(R.mipmap.ic_launcher) 

      .setContentTitle("Sample text 1 ?") 

      .setContentText("Sample text 2").setContentIntent(pi) 
      .addAction(R.drawable.ic_done_white_36dp, "Yes", pendingIntentYes) 
      .addAction(R.drawable.ic_close_white_36dp, "No", pendingIntentNo); 
    // Allows notification to be cancelled when user clicks it 
    nBuilder.setAutoCancel(true); 

    // Issuing notification 

    int notificationId = 0; 
    NotificationManager notifyMgr = (NotificationManager) ctx.getSystemService(NOTIFICATION_SERVICE); 
    String action = intent.getAction(); 
    if (CallReceiver.YES_ACTION.equals(action)) { 
     Toast.makeText(ctx, "YES CALLED", Toast.LENGTH_SHORT).show(); 
    } else if (CallReceiver.NO_ACTION.equals(action)) { 
     Toast.makeText(ctx, "STOP CALLED", Toast.LENGTH_SHORT).show(); 
    } 
    notifyMgr.notify(notificationId, nBuilder.build()); 

} 

dieser Code in meinem CallReciever.class ist, die sich Phonecallreciever wo, phonecallreciever verlängert broadcastreciver.

Antwort

0

Das ist nicht wie es funktioniert. Sie müssen diese Aktionen mit BroadcastReciever, registriert in laufenden Activity, Fragment oder Service beobachten.

IntentFilter filter = new IntentFilter(); 
filter.addAction(YES_ACTION); 
filter.addAction(NO_ACTION); 

BroadcastReceiver receiver = new BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (CallReceiver.YES_ACTION.equals(action)) { 
      Toast.makeText(ctx, "YES CALLED", Toast.LENGTH_SHORT).show(); 
     } else if (CallReceiver.NO_ACTION.equals(action)) { 
      Toast.makeText(ctx, "STOP CALLED", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 
context.registerReceiver(receiver, filter); 

Vergessen Sie auch nicht, es zu deregistrieren, wenn Activity, Fragment oder Service zerstört werden.

+0

die Sache ist, auf klicken Schaltfläche Ja, ich möchte von eingehenden Anruf die Details in db..ie (endgültige Kontext ctx, final String-Nummer, Endtermin Start) erhalten retten ... .Wenn du sagst, dass du sagst ... ich werde nicht in der Lage sein, die Details in Onrecive-Funktion – Androidss

+0

@Androidss Ich denke nicht so. In 'onRecieve (Kontext Kontext, Intent Intent)' haben Sie alles was Sie brauchen: 1. Kontext, den Sie verwenden können, um db zu öffnen oder auf Systemdienste zuzugreifen; 2. Absicht, die alle gemeinsamen Daten durch "Absicht" hat. Versuchen Sie, sie zu verwenden, um alle Daten zu speichern, die Sie benötigen. –

0

In jeder Aktion müssen Sie einen PendingIntent deklarieren, der die Aktion behandelt, nachdem der Benutzer darauf geklickt hat. In diesem PendingIntent können Sie problemlos Daten übergeben, wenn Sie Intent.putExtra (Schlüssel, Wert) verwenden und diese Daten dann von dem von Ihnen deklarierten Broadcast-Empfänger abrufen.

//done action button 
    Intent doneIntent = new Intent(this, NotificationDoneReceiver.class); 
    doneIntent.putExtra("id", id); 
    doneIntent.putExtra("notification_id",unique_id); 
    PendingIntent donePendingIntent = PendingIntent.getBroadcast(this, (unique_id * 16), doneIntent, 0); 

//create the notification 
    Notification n = builder 
      //set title 
      .setContentTitle(title) 

      .setPriority(NotificationCompat.PRIORITY_MAX) 

      .setWhen(0) 
        //set content 
      .setContentText(getString(R.string.time_for_medicine) + " " + medicine) 
        //set intent to launch on content click 
      .setContentIntent(pIntent) 
        //cancel notification on click 
      .setAutoCancel(true) 
        //add the actions 
      .addAction(R.drawable.ic_done, getString(R.string.took_it), donePendingIntent) 

      .build(); 

Broadcast-Empfänger für die erledigte Aktion.

public class NotificationDoneReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    int id = intent.getExtras().getInt("id"); 
    int notification_id = intent.getExtras().getInt("notification_id"); 

    RealmDatabase db = new RealmDatabase(context); 
    MedicationPlanEvent medicationPlanEvent = db.getMedicationPlanEventBasedOnID(id); 

    if(medicationPlanEvent!=null){ 
     Medication medication = new Medication(medicationPlanEvent.getMedicine(), TimeManager.getCurrentDate(),medicationPlanEvent.getDose(),TimeManager.getCurrentTime(),"",medicationPlanEvent.getDose_meter()); 
     medication.setId(db.getMedicationNextKey()); 

     db.insertMedication(medication); 
    } 


    //notification manager 
    NotificationManager notificationManager = 
      (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); 

    notificationManager.cancel(notification_id); 

    Intent overviewIntent = new Intent(context.getApplicationContext(), OverviewActivity.class); 
    overviewIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(overviewIntent); 


} 

}