首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在单击操作时取消通知

如何在单击操作时取消通知
EN

Stack Overflow用户
提问于 2016-08-13 16:28:19
回答 1查看 1K关注 0票数 2

我有一个通知,它有一个动作"Open Dial“。我想要当我点击“打开拨号”的动作。我的通知将消失,并显示Dial。

我尝试了setAutocancel(true)并设置了notification.flags = Notification.FLAG_AUTO_CANCEL,但这些都不起作用。

我知道在为通知设置操作时不能使用SetAutocancel和设置Flag_Auto_Cancel。如果我想这样做,我必须使用NotificationManagercancel(id)函数。

我的想法是发送一个IntentFilter,并使用BroadcastReceiver在单击“打开拨号”时接收它。

但我不知道该怎么做,因为Intent.Action_Dial是一种活动。如果我使用PendingIntent.getBroacast(),广播的onReceive()中的功能可以工作,但是拨号不会显示。有人知道我该如何解决这个问题吗?

以下是我的注意事项:

代码语言:javascript
复制
  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);

这是我的听筒

代码语言:javascript
复制
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");
    }
}

这是mainifest

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2016-08-13 16:52:43

解决方案是在取消通知后在BroadcastReceiver中启动活动。下面是PendingIntent的代码:

代码语言:javascript
复制
Intent intent = new Intent();
intent.setAction("cancelDial");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, MSG_B, intent, PendingIntent.FLAG_UPDATE_CURRENT);

以及BroadcastReceiver的代码:

代码语言:javascript
复制
    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);
    }

希望它能在未来帮助到某些人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38930804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档