解决OPPO Reno Ace(Android 10)、华为P20、P30进入自启权限设置页面问题,通过AccessibilityService获取栈顶Activity和相应的包名以及类名

我的问题


       在借鉴了网上各路大佬的成果后,发现在Android 10以上大家对自启权限和白名单权限的资料甚少。以至于不能直接通过Copy来解决问题,在华为P20、P30和OPPO Reno Ace等手机上,不能通过各路大佬的代码来引导用户进入相关权限的设置页面。

解决方案


       经过一番度娘后,发现有两种方式可以获取栈顶页面的包名和类名,分别是adb和AccessibilityService,由于我没有真机不好进行adb连接,只有通过自己实现一个AccessibilityService应用,以悬浮窗的方式来显示栈顶页面的包名和类名。

实践过程


  1. 申请阿里云EMAS移动测试权限;

在这里插入图片描述
2. 实现AccessibilityService查看包名类名应用;

 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
	   <service
            android:name=".TrackerService"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">

            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService"/>
            </intent-filter>

            <meta-data
                android:name="android.accessibilityservice"
                android:resource="@xml/accessibility_service_config"/>

        </service>
public class TrackerService extends AccessibilityService {
    public static final String TAG = "TrackerService";

    @Override
    public void onCreate() {
        super.onCreate();
    }


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

    @Override
    public void onInterrupt() {

    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        
        if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {

            CharSequence packageName = event.getPackageName();
            CharSequence className = event.getClassName();
            if (!TextUtils.isEmpty(packageName) && !TextUtils.isEmpty(className)) {
               Log.d(TAG, "Do something");
            }
        }
    }

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

}

3.在EMAS平台上选择相应的机型,上传应用,打开到设置自启动的页面,通过悬浮窗即可看到当前页面的包名和类名;

我的成果


华为P20、P30
-----------------------------------------------------------------------
自启权限:
com.huawei.systemmanager
com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity


OPPO Reno Ace权限相关设置:
-----------------------------------------------------------------------
关闭闲置应用:
com.coloros.safecnter
.appfrozen.activity.AppFrozenSettingActivity

自定义耗电保护:
com.coloros.oppoguardelf
com.coloros.powermaneger.fuelgaue.PowerUsageModelActivity


自启权限:
com.coloros.safecenter
.startupapp.StartupAppListActivity

关联启动:
com.coloros.safecenter
.startupapp.AssociateStartActivity

普通权限设置页面:
com.coloros.securitypermission
.permission.PermissionGroupsActivity


中兴-ZTE V1000-9:
-----------------------------------------------------------------------
电池优化:
com.zte.powersavemode
.appspowersave.AppManagerActivityMFV

使用:

var intent = Intent()
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
var componentName: ComponentName? = null
if (Build.BRAND.equals("Huawei")) {
    componentName = ComponentName(
        "com.huawei.systemmanager",
        "com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity"
    )
} 
intent.component = componentName
context.startActivity(intent)

       感谢各路大佬无私的奉献,下一个解决问题是,实时监听悬浮窗权限是否打开?没有打开时在后台启动设置页面,可以实现无论用户是否打开权限都可以限制用户正常使用手机。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉念聿辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值