zzq1996 2024-04-11 10:31 采纳率: 0%
浏览 1

Android10不能彻底杀死第三方播放器应用,Android7.1可以杀死,在Android10上有没有什么办法

Android10不能彻底杀死第三方播放器应用,Android7.1可以杀死,在Android10上有没有什么办法

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-11 10:31
    关注

    引自免费微信小程序:皆我百晓生

    在Android 10中,Google引入了更严格的隐私和后台运行限制,这使得完全"杀死"一个应用变得更加困难,特别是对于第三方应用。然而,用户仍然可以通过一些方法来降低应用的活跃程度,使其看起来像是被"杀死"了。

    这里有一种可能的方法,通过设置应用的权限来限制其运行:

    1. 关闭自动启动:阻止应用在设备启动时自动运行。
    2. 关闭后台运行:限制应用在后台运行。
    3. 禁用通知:防止应用显示通知,这可能会让它看起来像是被关闭了。

    下面是如何实现这些步骤的详细指南:

    步骤1:关闭自动启动

    在某些设备上,你可以在手机设置中找到“应用管理”或类似的选项。在那里,选择你要关闭自动启动的应用,然后关闭“允许应用程序在启动时启动”。

    如果你想要编写代码来控制这个功能,可以尝试使用以下方法(注意,这可能不适用于所有设备):

    private void disableAutoStart(Context context, String packageName) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            if (powerManager.isIgnoringBatteryOptimizations(packageName)) {
                Intent intent = new Intent();
                String packageNameToCheck = context.getPackageName();
                ComponentName componentName = new ComponentName(packageNameToCheck, ".MainActivity");
                intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                intent.setData(Uri.parse("package:" + packageName));
                context.startActivity(intent);
            }
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            if (!pm.isInteractive()) return;
            // Disable the autostart for the package.
            PackageInfo pi = null;
            try {
                pi = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
            } catch (PackageManager.NameNotFoundException e) {
                Log.e("disableAutoStart", "Error getting package info", e);
                return;
            }
            ComponentName component = new ComponentName(packageName, pi.activities[0].name);
            AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            alarmManager.cancel(new PendingIntent(
                    AlarmManager.RTC_WAKEUP,
                    pi.applicationInfo.uid,
                    0,
                    Uri.parse("package:" + packageName),
                    component
            ));
        }
    }
    

    步骤2:关闭后台运行

    从Android 8.0开始,系统默认允许应用在后台运行。但是,你可以通过调整电池优化设置来限制它们。在手机设置中,找到“应用管理”,选择你要限制的应用,然后选择“存储”,在“后台数据”部分关闭它。

    如果你需要编程实现,可以尝试以下代码:

    private void disableBackgroundRunning(Context context, String packageName) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            activityManager.setAppOpsMode(AppOpsManager.MODE管理系统);
            AppOpsManager appOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
            int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR不允许后台服务, android.os.Process.myUid(), packageName);
            if (mode != AppOpsManager.MODE允许) {
                appOps.setMode(AppOpsManager.OP不允许后台服务, android.os.Process.myUid(), packageName, AppOpsManager.MODE管理系统);
            }
        }
    }
    

    步骤3:禁用通知

    在手机设置中,找到“应用管理”,选择你要禁止通知的应用,然后关闭“显示通知”。此外,你还可以通过代码来实现:

    private void disableNotifications(Context context, String packageName) {
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        notificationManager.setInterruptionFilter(NotificationManagerCompat.INTERRUPTION_FILTER_NONE);
    }
    

    请注意,这些操作可能会对应用的功能产生影响,因此在执行之前请确保你了解这些限制可能带来的后果。另外,不同的设备和厂商可能有不同的实现方式,上述代码可能需要根据实际情况进行调整。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月11日

悬赏问题

  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了