Android 点击悬浮窗后台启动Activity问题及方案

这篇具有很好参考价值的文章主要介绍了Android 点击悬浮窗后台启动Activity问题及方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:开启悬浮窗,当app进入后台后,点击悬浮窗进入固定页面

问题:当app在后台运行时,点击悬浮窗,以下代码不能拉起app,经排查,部门手机需要开启后台弹出界面权限

val intent = Intent(context, PhoneMainActivity::class.java)
intent.putExtra(MESSAGE_TYPE, pushMessageVO.type)
intent.putExtra(JUMP, true)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)

如图 

android后台弹窗权限,android

不同的机型这个权限的名称也不相同,要开启此权限,要跳转的界面也不同,所以需要获取不同机型的此页面路径

获取权限页面路径过程如下,测试机型:vivo X21A

1. 获取连接设备名

adb devices

2. 手机打开需要获取权限的页面,用以下命令获取路径

adb -s 设备名 shell dumpsys activity activities

android后台弹窗权限,android

 如此,便结束了

附不同厂商跳转后台弹出界面,自启动,加入白名单,电池优化的工具类文章来源地址https://www.toymoban.com/news/detail-672926.html

import android.Manifest;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.PowerManager;
import android.provider.Settings;
import android.util.Log;

import androidx.annotation.IntRange;
import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.allqj.basic_lib.BasicLib;

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class PermissionUtil {

    public static int IGNORE_BATTERY_CODE = 1880;

    private static LinkedHashMap<String, List<String>> autoStartHashMap = new LinkedHashMap<String, List<String>>() {
        {
            put("XIAOMI", Arrays.asList(
                    "com.miui.securitycenter/com.miui.appmanager.ApplicationsDetailsActivity",
                    "com.miui.securitycenter/com.miui.permcenter.autostart.AutoStartManagementActivity",
                    "com.miui.securitycenter"
            ));
            put("HUAWEI", Arrays.asList(
                    "com.huawei.systemmanager/.appcontrol.activity.StartupAppControlActivity",
                    "com.huawei.systemmanager/.startupmgr.ui.StartupNormalAppListActivity",
                    "com.huawei.systemmanager/.optimize.process.ProtectActivity",
                    "com.huawei.systemmanager/.optimize.bootstart.BootStartActivity",
                    "com.huawei.systemmanager"
            ));
            // 荣耀
            put("HONOR", Arrays.asList(
                    "com.hihonor.systemmanager/.appcontrol.activity.StartupAppControlActivity",
                    "com.hihonor.systemmanager/.startupmgr.ui.StartupNormalAppListActivity",
                    "com.hihonor.systemmanager"
            ));
            put("VIVO", Arrays.asList(
                    "com.vivo.permissionmanager/.activity.SoftPermissionDetailActivity",
                    "com.vivo.permissionmanager/.activity.BgStartUpManagerActivity",
                    "com.vivo.permissionmanager/.activity.PurviewTabActivity",
                    "com.iqoo.secure/.ui.phoneoptimize.BgStartUpManager",
                    "com.iqoo.secure/.safeguard.PurviewTabActivity",
//                    "com.iqoo.secure/.ui.phoneoptimize.AddWhiteListActivity", //这是白名单, 不是自启动
                    "com.vivo.permissionmanager",
                    "com.iqoo.secure"
            ));
            put("OPPO", Arrays.asList(
                    "com.android.settings/com.oplus.settings.feature.homepage.OplusSettingsHomepageActivity",
                    "com.android.settings/com.oplus.settings.OplusSubSettings",
                    "com.android.settings/com.android.settings.SubSettings",
                    "com.oplus.safecenter/.startupapp.view.StartupAppListActivity",
                    "com.coloros.safecenter/.startupapp.StartupAppListActivity",
                    "com.coloros.safecenter/.permission.startup.StartupAppListActivity",
                    "com.oppo.safe/.permission.startup.StartupAppListActivity",
                    "com.coloros.oppoguardelf/com.coloros.powermanager.fuelgaue.PowerUsageModelActivity",
                    "com.coloros.safecenter/com.coloros.privacypermissionsentry.PermissionTopActivity",
                    "com.coloros.safecenter",
                    "com.oppo.safe",
                    "com.coloros.oppoguardelf"
            ));
            put("MEIZU", Arrays.asList(
                    "com.meizu.safe/.permission.SmartBGActivity",
                    "com.meizu.safe/.permission.PermissionMainActivity",
                    "com.meizu.safe"
            ));
            put("SAMSUNG", Arrays.asList(
                    "com.samsung.android.sm_cn/com.samsung.android.sm.ui.ram.AutoRunActivity",
                    "com.samsung.android.sm_cn/com.samsung.android.sm.ui.appmanagement.AppManagementActivity",
                    "com.samsung.android.sm_cn/com.samsung.android.sm.ui.cstyleboard.SmartManagerDashBoardActivity",
                    "com.samsung.android.sm_cn/.ui.ram.RamActivity",
                    "com.samsung.android.sm_cn/.app.dashboard.SmartManagerDashBoardActivity",

                    "com.samsung.android.sm/com.samsung.android.sm.ui.ram.AutoRunActivity",
                    "com.samsung.android.sm/com.samsung.android.sm.ui.appmanagement.AppManagementActivity",
                    "com.samsung.android.sm/com.samsung.android.sm.ui.cstyleboard.SmartManagerDashBoardActivity",
                    "com.samsung.android.sm/.ui.ram.RamActivity",
                    "com.samsung.android.sm/.app.dashboard.SmartManagerDashBoardActivity",

                    "com.samsung.android.lool/com.samsung.android.sm.ui.battery.BatteryActivity",
                    "com.samsung.android.sm_cn",
                    "com.samsung.android.sm"
            ));
            put("ONEPLUS", Arrays.asList(
                    "com.oneplus.security/.chainlaunch.view.ChainLaunchAppListActivity",
                    "com.oneplus.security"
            ));
            put("LETV", Arrays.asList(
                    "com.letv.android.letvsafe/.AutobootManageActivity",
                    "com.letv.android.letvsafe/.BackgroundAppManageActivity",
                    "com.letv.android.letvsafe"
            ));
            put("ZTE", Arrays.asList(
                    "com.zte.heartyservice/.autorun.AppAutoRunManager",
                    "com.zte.heartyservice"
            ));
            //金立
            put("F", Arrays.asList(
                    "com.gionee.softmanager/.MainActivity",
                    "com.gionee.softmanager"
            ));
            //以下为未确定(厂商名也不确定)
            put("SMARTISANOS", Arrays.asList(
                    "com.smartisanos.security/.invokeHistory.InvokeHistoryActivity",
                    "com.smartisanos.security"
            ));
            //360
            put("360", Arrays.asList(
                    "com.yulong.android.coolsafe/.ui.activity.autorun.AutoRunListActivity",
                    "com.yulong.android.coolsafe"
            ));
            //360
            put("ULONG", Arrays.asList(
                    "com.yulong.android.coolsafe/.ui.activity.autorun.AutoRunListActivity",
                    "com.yulong.android.coolsafe"
            ));
            //酷派
            put("COOLPAD"/*厂商名称不确定是否正确*/, Arrays.asList(
                    "com.yulong.android.security/com.yulong.android.seccenter.tabbarmain",
                    "com.yulong.android.security"
            ));
            //联想
            put("LENOVO"/*厂商名称不确定是否正确*/, Arrays.asList(
                    "com.lenovo.security/.purebackground.PureBackgroundActivity",
                    "com.lenovo.security"
            ));
            put("HTC"/*厂商名称不确定是否正确*/, Arrays.asList(
                    "com.htc.pitroad/.landingpage.activity.LandingPageActivity",
                    "com.htc.pitroad"
            ));
            //华硕
            put("ASUS"/*厂商名称不确定是否正确*/, Arrays.asList(
                    "com.asus.mobilemanager/.MainActivity",
                    "com.asus.mobilemanager"
            ));
            //酷派
            put("YULONG", Arrays.asList(
                    "com.yulong.android.softmanager/.SpeedupActivity",
                    "com.yulong.android.security/com.yulong.android.seccenter.tabbarmain",
                    "com.yulong.android.security"
            ));
        }
    };

    private static LinkedHashMap<String, List<String>> bgPopHashMap = new LinkedHashMap<String, List<String>>() {
        {
            put("XIAOMI", Arrays.asList(
                    "com.miui.securitycenter/com.miui.permcenter.permissions.PermissionsEditorActivity",
                    "com.miui.securitycenter/com.miui.appmanager.ApplicationsDetailsActivity",
                    "com.miui.securitycenter"
            ));
            put("HUAWEI", Arrays.asList(
                    "com.huawei.systemmanager/.appcontrol.activity.StartupAppControlActivity",
                    "com.huawei.systemmanager"
            ));
            // 荣耀
            put("HONOR", Arrays.asList(
                    "com.hihonor.systemmanager/.appcontrol.activity.StartupAppControlActivity",
                    "com.hihonor.systemmanager/.startupmgr.ui.StartupNormalAppListActivity",
                    "com.hihonor.systemmanager"
            ));
            put("VIVO", Arrays.asList(
                    "com.vivo.permissionmanager/.activity.StartBgActivityControlActivity",//需要com.vivo.permission.manage.permission.ACCESS权限
                    "com.vivo.permissionmanager/.activity.SoftPermissionDetailActivity",
                    "com.vivo.permissionmanager/.activity.PurviewTabActivity",
                    "com.vivo.permissionmanager",
                    "com.iqoo.secure"
            ));
            put("MEIZU", Arrays.asList(
                    "com.meizu.safe/.permission.PermissionMainActivity",
                    "com.meizu.safe"
            ));
            put("OPPO", Arrays.asList(
                    "com.oplus.battery/com.oplus.powermanager.fuelgaue.PowerControlActivity",//not exported
                    "com.android.settings/com.oplus.settings.OplusSubSettings",
                    "com.android.settings/com.android.settings.SubSettings",
                    "com.coloros.oppoguardelf/com.coloros.powermanager.fuelgaue.PowerUsageModelActivity",
                    "com.coloros.safecenter/com.coloros.privacypermissionsentry.PermissionTopActivity",
                    "com.coloros.safecenter",
                    "com.oppo.safe",
                    "com.coloros.oppoguardelf"
            ));
            put("SAMSUNG", Arrays.asList(
                    "com.samsung.android.lool",
                    "com.samsung.android.sm_cn",
                    "com.samsung.android.sm"
            ));
            put("ONEPLUS", Arrays.asList(
                    "com.oneplus.security/.chainlaunch.view.ChainLaunchAppListActivity",
                    "com.oneplus.security"
            ));
            put("LETV", Arrays.asList(
                    "com.letv.android.letvsafe/.AutobootManageActivity",
                    "com.letv.android.letvsafe/.BackgroundAppManageActivity",
                    "com.letv.android.letvsafe"
            ));
            put("ZTE", Arrays.asList(
                    "com.zte.heartyservice"
            ));
            //金立
            put("F", Arrays.asList(
                    "com.gionee.softmanager/.MainActivity",
                    "com.gionee.softmanager"
            ));
            //以下为未确定(厂商名也不确定)
            put("SMARTISANOS", Arrays.asList(
                    "com.smartisanos.security/.invokeHistory.InvokeHistoryActivity",
                    "com.smartisanos.security"
            ));
            //360
            put("360", Arrays.asList(
                    "com.yulong.android.coolsafe"
            ));
            //360
            put("ULONG", Arrays.asList(
                    "com.yulong.android.coolsafe"
            ));
            //酷派
            put("COOLPAD"/*厂商名称不确定是否正确*/, Arrays.asList(
                    "com.yulong.android.security/com.yulong.android.seccenter.tabbarmain",
                    "com.yulong.android.security"
            ));
            //联想
            put("LENOVO"/*厂商名称不确定是否正确*/, Arrays.asList(
                    "com.lenovo.security/.purebackground.PureBackgroundActivity",
                    "com.lenovo.security"
            ));
            put("HTC"/*厂商名称不确定是否正确*/, Arrays.asList(
                    "com.htc.pitroad/.landingpage.activity.LandingPageActivity",
                    "com.htc.pitroad"
            ));
            //华硕
            put("ASUS"/*厂商名称不确定是否正确*/, Arrays.asList(
                    "com.asus.mobilemanager/.MainActivity",
                    "com.asus.mobilemanager"
            ));
            //酷派
            put("YULONG", Arrays.asList(
                    "com.yulong.android.softmanager/.SpeedupActivity",
                    "com.yulong.android.security/com.yulong.android.seccenter.tabbarmain",
                    "com.yulong.android.security"
            ));
        }
    };

    private static LinkedHashMap<String, List<String>> powerSavingHashMap = new LinkedHashMap<String, List<String>>() {
        {
            put("XIAOMI", Arrays.asList(
                    "com.miui.powerkeeper/.ui.HiddenAppsConfigActivity",
                    "com.miui.securitycenter/com.miui.appmanager.ApplicationsDetailsActivity",
                    "com.miui.powerkeeper",
                    "com.miui.securitycenter"
            ));
            put("HUAWEI", Arrays.asList(
                    "com.android.settings/.Settings$HighPowerApplicationsActivity",
                    "com.android.settings"
            ));
            // 荣耀
            put("HONOR", Arrays.asList(
                    "com.hihonor.systemmanager/.power.ui.HwPowerManagerActivity",
                    "com.hihonor.systemmanager"
            ));
            put("VIVO", Arrays.asList(
                    "com.vivo.abe/com.vivo.applicationbehaviorengine.ui.ExcessivePowerManagerActivity",
                    "com.iqoo.powersaving/.PowerSavingManagerActivity",
                    "com.iqoo.powersaving"
            ));
            put("OPPO", Arrays.asList(
                    "com.oplus.battery/com.oplus.powermanager.fuelgaue.PowerControlActivity",//not exported
                    "com.android.settings/com.oplus.settings.OplusSubSettings",
                    "com.android.settings/com.android.settings.SubSettings",
                    "com.coloros.oppoguardelf/com.coloros.powermanager.fuelgaue.PowerConsumptionActivity",
                    "com.coloros.oppoguardelf"
            ));

        }
    };

    public static void startToPermissionSetting(Context context, String type) {
        Log.d("Util", "******************当前手机型号为:" + Build.MANUFACTURER);
        LinkedHashMap<String, List<String>> permissionMap = new LinkedHashMap<>();
        if ("autoStart".equals(type)) {
            permissionMap = autoStartHashMap;
        } else if ("powerSaving".equals(type)) {
            permissionMap = powerSavingHashMap;
        } else if ("bgPop".equals(type)) {
            permissionMap = bgPopHashMap;
        }
        
        if (!permissionMap.keySet().contains(Build.MANUFACTURER.toUpperCase())){
            Intent intent = new Intent(Settings.ACTION_SETTINGS);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
            return;
        }

        for (Map.Entry<String, List<String>> entry : permissionMap.entrySet()) {
            String manufacturer = entry.getKey();
            List<String> actCompatList = entry.getValue();
            if (Build.MANUFACTURER.equalsIgnoreCase(manufacturer)) {
                for (String act : actCompatList) {
                    try {
                        Intent intent;
                        if (act.contains("/")) {
                            Log.d("Util", "******************act为:" + act);
                            intent = new Intent();
                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            ComponentName componentName = ComponentName.unflattenFromString(act);
                            intent.setComponent(componentName);
                            intent.putExtra("packagename", context.getPackageName());//vivo-SoftPermissionDetailActivity
                            intent.putExtra("extra_pkgname", context.getPackageName());//xiaomi-PermissionsEditorActivity
                            intent.putExtra("package_name", context.getPackageName());//xiaomi-ApplicationsDetailsActivity
                        } else {
                            //所以我是直接跳转到对应的安全管家/安全中心
                            intent = context.getPackageManager().getLaunchIntentForPackage(act);
                        }
                        context.startActivity(intent);
                        break;
                    } catch (Exception e) {
                        e.printStackTrace();
                        Intent intent = new Intent(Settings.ACTION_SETTINGS);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(intent);
                    }
                }
            }
        }
    }

    public static boolean isIgnoringBatteryOptimizations(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            if (powerManager != null) {
                return powerManager.isIgnoringBatteryOptimizations(context.getPackageName());
            } else {
                return false;
            }
        } else {
            return true;
        }
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    public static void requestIgnoreBatteryOptimizations(Activity context) {
        try {
            Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
            intent.setData(Uri.parse("package:" + context.getPackageName()));
            context.startActivityForResult(intent, IGNORE_BATTERY_CODE);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

到了这里,关于Android 点击悬浮窗后台启动Activity问题及方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 后台启动startService()相关问题的解决

    有一个用户需要这样一个功能,要求是APP能在充电的时候自动进入APP的一个界面 我寻思着,这玩意用普通权限做不了呀,不过APP有root权限倒也无妨,于是便决定采用Service去做后台服务 某天,在Bugly看到如下的错误报告 提示我无法在后台启动这个服务 于是便开始着手解决这

    2024年02月02日
    浏览(73)
  • Android Activity的启动流程(Android-10)

    在Android开发中,我们经常会用到startActivity(Intent)方法,但是你知道startActivity(Intent)后Activity的启动流程吗?今天就专门讲一下最基础的startActivity(Intent)看一下Activity的启动流程,同时由于Launcher的启动后续和这里基本类似,就记录在一起。注意本章都是基于Android-10来讲解的。

    2024年01月17日
    浏览(45)
  • Android Activity启动过程详解

    1,《android系统启动流程简介》 2,《android init进程启动流程》 3,《android zygote进程启动流程》 4,《Android SystemServer进程启动流程》 5,《android launcher启动流程》 6,《Android Activity启动过程详解》 1,《Android 源码下载和编译》 2,《android 11源码编译和pixel3 刷机》 3,《Andro

    2024年02月09日
    浏览(48)
  • Android问题解决方案(一):Android 打空包提交开发者后台提示没有”android:exported“的属性设置

    今日了解到了一个新内容,意指打一个新的空包提审,来实现同个应用二次提审的效果;通过一系列操作后,成功打出了所谓aab格式的安装包。(至于为什么是aab格式,相信有所了解的朋友自然也知道什么原因,还未曾了解的朋友可以先了解相关的信息,这里就不赘述了,自

    2023年04月11日
    浏览(52)
  • Activity 的启动流程(Android 13)

    Activity 的启动过程分为两种:一种是普通 Activity 的启动过程,另一种是根 Activity 的启动过程。普通 Activity 指的是除应用程序启动的第一个 Activity 之外的其他 Activity。 根 Activity 指的是应用程序启动的第一个 Activity,因此,根 Activity 的启动过程一般情况下也可以理解为应用程

    2024年02月11日
    浏览(46)
  • Android Activity启动流程一:从Intent到Activity创建

    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 学习前,建议有相关知识储备: 【Android 基础】 应用(Application)启动流程 通过本文你可以学习到Activity启动流

    2024年02月10日
    浏览(44)
  • Android Activity 启动流程 二:setContentView

    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 接 - 上 篇,Activity创建后,还只是调用了onCreate方法,页面并没有展示出来,还需要调用setContentVie

    2024年02月10日
    浏览(46)
  • Android Framework学习之Activity启动原理

    Android 13.0 Activity启动原理逻辑流程图如下:

    2024年02月05日
    浏览(52)
  • Activity启动过程详解(Android 12源码分析)

    启动一个Activity,通常有两种情况,一种是在应用内部启动Activity,另一种是Launcher启动 1、应用内启动 通过startActivity来启动Activity 启动流程: 一、Activity启动的发起 二、Activity的管理——ATMS 三、线程切换即消息处理——mH 四、Activity启动核心实现——初始化及生命周期 2、

    2024年02月13日
    浏览(45)
  • Android入门教程之Activity(生命周期,启动...)

    Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。 Activity 1. Activity 的使用 我们新建

    2024年02月04日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包