2017-07-20 66 views
0

以下是我的代码。我已经把行动(是或否)使用的addAction到notification.But的问题是,如果它按我无法检测或not.Plz帮助..谢谢如何检测是否按通知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()); 

} 

这个代码是在我的CallReciever.class延伸Phonecallreciever 其中,phonecallreciever延长broadcastreciver。

回答

0

那不是它是如何工作的。您必须使用BroadcastReciever观察此操作,并在运行ActivityFragmentService中注册。

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); 

也不要忘记注销它时,ActivityFragmentService被破坏。

+0

事情是在点击Yes按钮,我想保存在db..ie从来电中获得的细节(最后语境环磷酰胺,最终串号,最后的日期开始)...如果你说我不能在Obregive功能中使用详细信息 – Androidss

+0

@Androidss我不这么认为。在'onRecieve(Context context,Intent intent)'中,您拥有所有您需要的内容:1. context,您可以使用它打开数据库或访问系统服务; 2. intent,它通过'Intent'拥有所有共享数据。尝试使用它们来存储所有你需要的数据。 –

0

在每一个动作中,你需要声明一个PendingIntent,它将在用户点击它后处理动作。在此PendingIntent中,如果使用Intent.putExtra(key,value),则可以轻松地传递数据,然后从您声明的广播接收器中检索此数据。

//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(); 

已完成操作的广播接收器。

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); 


} 

}