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和set
Flag\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我想两天结束了