Android 如何在单击“操作”时取消通知
我有一个通知,其中有一个操作“打开拨号”。我想当我点击“打开拨号”的行动。我的通知将消失,拨号将出现 我尝试了Android 如何在单击“操作”时取消通知,android,android-intent,push-notification,notifications,android-notifications,Android,Android Intent,Push Notification,Notifications,Android Notifications,我有一个通知,其中有一个操作“打开拨号”。我想当我点击“打开拨号”的行动。我的通知将消失,拨号将出现 我尝试了setAutocancel(true)并设置了notification.flags=notification.FLAG\u AUTO\u CANCEL,但这些都不起作用 我知道当我为通知设置操作时,我不能使用SetAutocancel和setFlag\u Auto\u Cancel。如果我想这样做,我必须使用NotificationManager的cancel(id)功能 我的想法是发送
setAutocancel(true
)并设置了notification.flags=notification.FLAG\u AUTO\u CANCEL
,但这些都不起作用
我知道当我为通知设置操作时,我不能使用SetAutocancel和setFlag\u Auto\u Cancel
。如果我想这样做,我必须使用NotificationManager
的cancel(id)
功能
我的想法是发送一个IntentFilter
,并在单击“打开拨号”时使用BroadcastReceiver
接收它
但我不知道我该怎么做,因为意图。行动拨号是一项活动。如果我使用pendingent.getBroacast()
,则广播的onReceive()
中的函数可以工作,但不会显示拨号。有人知道我如何解决这个问题吗
这是我的通知:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentTitle("Notification");
builder.setContentText("This is notification");
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setTicker("This is ticker");
Intent intent = new Intent(Intent.ACTION_DIAL);
PendingIntent pendingIntent = PendingIntent.getActivity(this, MSG_B, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.addAction(R.mipmap.ic_launcher, "Dial", pendingIntent);
builder.setAutoCancel(true);
Notification notification = builder.build();
notification.flags = Notification.FLAG_AUTO_CANCEL;
NotificationManager manager = (NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);
manager.notify(id, notification);
这是我的听筒
NotificationCompat.Builder builder;
Notification notification;
NotificationManager manager;
@Override
public void onReceive(Context context, Intent intent) {
manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if(intent.getAction().equals("download")){
Log.d("LOG","Download");
showNotify(3, context);
DownloadFileFromURL downloadFileFromURL = new DownloadFileFromURL();
downloadFileFromURL.execute("http://freebigpictures.com/wp-content/uploads/2009/09/river-edge.jpg");
}
else if(intent.getAction().equals("android.intent.action.DIAL")){
Log.d("LOG", "cacel Dial");
manager.cancel(NotificationServices.MSG_B);
}
else if(intent.getAction().equals("cancelActivity")){
Log.d("LOG","cacel Activity");
manager.cancel(NotificationServices.MSG_B);
}
else {
Log.d("LOG","Fail ABC");
}
}
这是最重要的
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".activity.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".services.NotificationServices"
android:enabled="true"
android:exported="true">
</service>
<receiver android:name=".broadcast.BroadcastReceiverImage">
<intent-filter>
<action android:name="download"/>
<action android:name="cancelDial"/>
<action android:name="cancelActivity"/>
<action android:name="android.intent.action.DIAL"></action>
</intent-filter>
</receiver>
</application>
解决方案是在取消通知后在BroadcastReceiver中启动活动。以下是Pending帐篷的代码:
Intent intent = new Intent();
intent.setAction("cancelDial");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, MSG_B, intent, PendingIntent.FLAG_UPDATE_CURRENT);
以及广播接收器的代码:
else if(intent.getAction().equals("cancelDial")){
Log.d("LOG", "Cancel Dial");
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
manager.cancel(NotificationServices.MSG_B);
}
希望它能在将来帮助别人。那么接受你的回答吧,我做不到。我需要两天:)@XiaoKing我想两天结束了