以下是我的代码。我已经使用addaction对通知进行了操作(是或否)。但问题是我无法检测是否按下了.Plz帮助..谢谢
@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 :(得分:0)
这不是它的工作原理。您必须使用BroadcastReciever
观察此操作,并在Activity
,Fragment
或Service
中注册。
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);
在Activity
,Fragment
或Service
被销毁时,请不要忘记取消注册。
答案 1 :(得分:0)
在每个操作中,您需要声明一个PendingIntent,它将在用户单击它之后处理该操作。在此PendingIntent中,如果使用Intent.putExtra(键,值),则可以轻松传递数据,然后从已声明的广播接收器中检索此数据。
//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);
}
}