Android - 取消通知

时间:2015-12-05 15:49:30

标签: android

我有一个简单的应用程序,它使用显示进度对话框中的进度以及持续通知的服务从Internet下载文件。 我的问题是如何在用户通过强制关闭应用程序来停止下载时删除通知(例如,通过长按主页按钮并清除所有最近的应用程序列表)。

我试过这个:

@Override
protected void onDestroy() {


    Toast.makeText(getApplicationContext(), "ADDIO", Toast.LENGTH_SHORT).show();

    NotificationManager nm =(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

    nm.cancelAll();

    super.onDestroy();

}

但它不起作用。

请帮忙

1 个答案:

答案 0 :(得分:0)

您可以从您的活动中开始提供服务。

步骤1创建一个杀死的服务 简单的一个。它只是杀死了关于创建的通知并且有他特殊的Binder。

public class KillNotificationsService extends Service {

    public class KillBinder extends Binder {
        public final Service service;

        public KillBinder(Service service) {
            this.service = service;
        }

    }

    public static int NOTIFICATION_ID = 666;
    private NotificationManager mNM;
    private final IBinder mBinder = new KillBinder(this);

    @Override
    public IBinder onBind(Intent intent) {
            return mBinder;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
            return Service.START_STICKY;
    }
    @Override
    public void onCreate() {
            mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            mNM.cancel(NOTIFICATION_ID);
    }
}

第2步:将其添加到您的清单 将它添加到您的< application>之间的某个位置标签

<service android:name="KillNotificationsService"></service>

步骤3:始终在触发通知之前创建服务,并使用静态通知。

ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName className,
            IBinder binder) {
        ((KillBinder) binder).service.startService(new Intent(
                MainActivity.this, KillNotificationsService.class));
        Notification notification = new Notification(
                R.drawable.ic_launcher, "Text",
                System.currentTimeMillis());
        Intent notificationIntent = new Intent(MainActivity.this,
                Place.class);
        PendingIntent contentIntent = PendingIntent.getActivity(
                MainActivity.this, 0, notificationIntent, 0);
        notification.setLatestEventInfo(getApplicationContext(),
                "Text", "Text", contentIntent);
        NotificationManager mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        mNM.notify(KillNotificationsService.NOTIFICATION_ID,
                notification);
    }

    public void onServiceDisconnected(ComponentName className) {
    }

};
bindService(new Intent(MainActivity.this,
        KillNotificationsService.class), mConnection,
        Context.BIND_AUTO_CREATE);

重新启动服务(1-5秒)可能需要一点时间,但最终会启动并终止通知。