Java Android - 在最近滑动后关闭应用程序(通知)

标签 java android notifications

在最近的应用程序中滑动后如何关闭应用程序(或仅删除所有通知)?在 API 级别 <= 22 中,它会自动工作(只需强制退出应用程序),但 API 级别 23 - 滑动后的 marshmallow+ 应用程序不会关闭,通知也不会关闭。

在 recnet 应用程序中滑动后如何终止通知或应用程序?

我在 onPause 上显示通知并在 onResume 上删除它...但是当我在最近的应用程序中滑动应用程序时(应用程序已关闭 - 重新打开应用程序后有新的初始化)但通知仍然存在,我需要杀死这个通知。

谢谢你们的回答。

顺便说一句:我尝试了服务(onTaskRemoved()),但这个函数永远不会被调用,我也不知道为什么..

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class MyService extends Service {

    private static final String TAG = "VYKAL";

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "onCreate()");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "onStartCommand()");
        return START_NOT_STICKY;
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        Log.i(TAG, "onTaskRemoved()");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy()");
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        Log.i(TAG, "onLowMemory()");
    }
}


super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent serviceIntent = new Intent(MainActivity.this, MyService.class);
        startService(serviceIntent);

编辑:通知

Intent notificationIntent = new Intent(compat, MainActivity.class);

        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent intent = PendingIntent.getActivity(compat, 0,
                notificationIntent, 0);

        mBuilder = new NotificationCompat.Builder(compat)
                .setSmallIcon(getSmallIcon(laststate))
                .setContentText(lastcontent)
                .setContentTitle(compat.getString(R.string.APPLICATION_NAME))
                .setContentIntent(intent).setOngoing(true);

        RemoteViews rv = new RemoteViews(compat.getPackageName(), R.layout.notification_layout);
        rv.setImageViewResource(R.id.imagenotileft, getLargeIconSRC(laststate));
        rv.setTextViewText(R.id.title, compat.getString(R.string.APPLICATION_NAME));
        rv.setTextViewText(R.id.text, lastcontent);
        mBuilder.setContent(rv);

        NotificationManager manager = (NotificationManager) compat.getSystemService(NOTIFICATION_SERVICE);
        manager.notify(0, mBuilder.build());

最佳答案

解决方案是使用 onTaskRemoved() 的新服务...示例:

    public class MyService extends Service {

    private static final String TAG = "VYKAL";

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "onCreate()");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "onStartCommand()");
        return START_NOT_STICKY;
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        MainActivity.closeActivity();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy()");
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        Log.i(TAG, "onLowMemory()");
    }
}
  • 在 list 中注册
  • 从您的主要 Activity 开始

关于Java Android - 在最近滑动后关闭应用程序(通知),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40169163/

相关文章:

android - Android 函数 View.getHitRect() 提供的值的定义是什么?

android - 如何从自己的前台通知停止服务

ios - 使用通知作为回调有问题吗?

java - 如何使用 SlidingMenu 库

android - 如何更改我的 Android 应用程序中所有文本的默认颜色?

java - 检查 JMockit NonStrictExpectations 中的 "any"参数

java - 在 Android 上移动数据库

android - 在 Android 中通知用户新推文

Java 枚举——字段、抽象方法和类级别映射之间的选择

java - 策略模式 - 如何注入(inject)策略 - NoUniqueBeanDefinitionException