AI手机网,短视频直播 硬改改机 一键新机 群控软件 刷机定制

 找回密码
 立即注册
搜索
查看: 1430|回复: 0

Android 开机 APK 引导用户开启自启动权限

[复制链接]
发表于 2020-4-25 17:58:11 | 显示全部楼层 |阅读模式

最近在做项目的过程中遇到了以下一个需求,虽然看起来不难实现,但是在实现的过程中遇到了各种坑,记录一下,今后方便查看!!!

需求:

用户第一次安装APP,点击授权按钮,跳转至授权的页面(不同手机跳转到不同的授权页面),用户授权成功之后,点击返回按钮,直接进入主页面

问题:

1.如何适配不同机型

2.不同机型的授权页面显示不同弹窗(比如三星显示悬浮窗,小米显示弹窗)

3.小米弹窗始终无法显示

4.在授权页面点击返回按钮,怎么直接跳转到主页面

问题1:适配不同机型

这个是借鉴的一篇博文(忘记地方了,后边找到了再添加~~)

  1. public class MobileInfoUtils{

  2. private SettingDialogPermision dialog_per;

  3. //获取手机类型

  4. private static String getMobileType() {

  5.   return Build.MANUFACTURER;

  6. }



  7. //跳转至授权页面

  8. public void jumpStartInterface(Context context) {

  9.   Intent intent = new Intent();

  10.   try {

  11.    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

  12.    Log.e("HLQ_Struggle", "******************当前手机型号为:" + getMobileType());

  13.    ComponentName componentName = null;

  14.    if (getMobileType().equals("Xiaomi")) { // 红米Note4测试通过

  15.     componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity");



  16.    } else if (getMobileType().equals("Letv")) { // 乐视2测试通过

  17.     intent.setAction("com.letv.android.permissionautoboot");

  18.    } else if (getMobileType().equals("samsung")) { // 三星Note5测试通过

  19.     //componentName = new ComponentName("com.samsung.android.sm_cn", "com.samsung.android.sm.ui.ram.AutoRunActivity");

  20.     //componentName = ComponentName.unflattenFromString("com.samsung.android.sm/.ui.ram.RamActivity");// Permission Denial not exported from uid 1000,不允许被其他程序调用

  21.     componentName = ComponentName.unflattenFromString("com.samsung.android.sm/.app.dashboard.SmartManagerDashBoardActivity");

  22.    } else if (getMobileType().equals("HUAWEI")) { // 华为测试通过

  23.     //componentName = new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity");//锁屏清理

  24.     componentName = ComponentName.unflattenFromString("com.huawei.systemmanager/.startupmgr.ui.StartupNormalAppListActivity");//跳自启动管理

  25.     //SettingOverlayView.show(context);

  26.    } else if (getMobileType().equals("vivo")) { // VIVO测试通过

  27.     componentName = ComponentName.unflattenFromString("com.iqoo.secure/.safeguard.PurviewTabActivity");

  28.    } else if (getMobileType().equals("Meizu")) { //万恶的魅族

  29.     //componentName = ComponentName.unflattenFromString("com.meizu.safe/.permission.PermissionMainActivity");//跳转到手机管家

  30.     componentName = ComponentName.unflattenFromString("com.meizu.safe/.permission.SmartBGActivity");//跳转到后台管理页面

  31.    } else if (getMobileType().equals("OPPO")) { // OPPO R8205测试通过

  32.     componentName = ComponentName.unflattenFromString("com.oppo.safe/.permission.startup.StartupAppListActivity");

  33.    } else if (getMobileType().equals("ulong")) { // 360手机 未测试

  34.     componentName = new ComponentName("com.yulong.android.coolsafe", ".ui.activity.autorun.AutoRunListActivity");

  35.    } else {

  36.     // 将用户引导到系统设置页面

  37.     if (Build.VERSION.SDK_INT >= 9) {

  38.      Log.e("HLQ_Struggle", "APPLICATION_DETAILS_SETTINGS");

  39.      intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");

  40.      intent.setData(Uri.fromParts("package", context.getPackageName(), null));

  41.     } else if (Build.VERSION.SDK_INT <= 8) {

  42.      intent.setAction(Intent.ACTION_VIEW);

  43.      intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");

  44.      intent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());

  45.     }

  46.    }

  47.    intent.setComponent(componentName);

  48.    context.startActivity(intent);

  49.    if (getMobileType().equals("Xiaomi")) {

  50.     showtip();//显示弹窗(**特别注意**)

  51.    }

  52.    if (getMobileType().equals("samsung")){

  53.     new SettingOverlayView().show(context);//显示悬浮窗

  54.    }



  55.   } catch (Exception e) {//抛出异常就直接打开设置页面

  56.    Log.e("HLQ_Struggle", e.getLocalizedMessage());

  57.    intent = new Intent(Settings.ACTION_SETTINGS);

  58.    context.startActivity(intent);

  59.   }

  60. }



  61. //小米手机显示弹窗

  62. private void showtip() {

  63.   try {

  64.    dialog_per=new SettingDialogPermision(context, R.style.CustomDialog4);

  65.    dialog_per.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);//注意这里改成吐司类型

  66.    dialog_per.show();

  67.    Log.e("HLQ_Struggle","显示弹窗");

  68.   } catch (Exception e) {

  69.    e.printStackTrace();

  70.    Log.e("HLQ_Struggle", "没有显示弹窗"+e.getMessage());

  71.   }

  72. }

  73. }
复制代码

问题2:不同机型的授权页面显示不同弹窗

在上面的问题中已经解决。

思路如下:

①首先判断当前的机型

②判断完机型之后,通过intent跳转至不同的授权页面

③在startActivity()之后显示悬浮窗或者是弹窗

④小米手机在显示弹窗的时候写上下面这一句话:、

  1.        
  2. getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST)
复制代码

因为这里类型没有用“吐司”,所以在授权页面一直不显示弹窗

问题3:小米弹窗始终无法显示

在问题2的第4步解决

问题4:在授权页面点击返回按钮,怎么直接跳转到主页面

逻辑梳理:

Activity A——–点击请求授权—–>跳转至系统授权页——–点击back键——–>要求跳转到主页面(也就是MainActivity,注意不是Activity A)

在实现的过程中,就一直钻牛角尖,这个授权页面的Activity我也拿不到,怎么监听返回按钮呢???(黑人问号脸)

所以啊,这时候就体现出Activity生命周期的重要性了。

在授权页面,点击返回键后,会再次跳转到Activity A页面,这时候只需要在Activity A中写上以下代码就完美的解决了:

  1. protected void onRestart() {

  2.   super.onRestart();

  3.   Intent intent = new Intent(SelfStartAcitity.this,MainActivity.class);

  4.   startActivity(intent);

  5.   overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);

  6.   finish();

  7. }
复制代码

这次再次体现了基础!基础!基础!是多么重要!



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术交流售后群

QQ|小黑屋|手机版|站点找错-建议|AI手机网 |Sitemap



GMT+8, 2024-5-17 12:07 , Processed in 0.148373 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表