android引导用户开启自启动权限的方法

前言:

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

需求:

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

问题:

1.如何适配不同机型

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

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

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

问题1:适配不同机型

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

public class MobileInfoUtils{
 private SettingDialogPermision dialog_per;
 //获取手机类型
 private static String getMobileType() {
  return Build.MANUFACTURER;
 }

 //跳转至授权页面
 public void jumpStartInterface(Context context) {
  Intent intent = new Intent();
  try {
   intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   Log.e("HLQ_Struggle", "******************当前手机型号为:" + getMobileType());
   ComponentName componentName = null;
   if (getMobileType().equals("Xiaomi")) { // 红米Note4测试通过
    componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity");

   } else if (getMobileType().equals("Letv")) { // 乐视2测试通过
    intent.setAction("com.letv.android.permissionautoboot");
   } else if (getMobileType().equals("samsung")) { // 三星Note5测试通过
    //componentName = new ComponentName("com.samsung.android.sm_cn", "com.samsung.android.sm.ui.ram.AutoRunActivity");
    //componentName = ComponentName.unflattenFromString("com.samsung.android.sm/.ui.ram.RamActivity");// Permission Denial not exported from uid 1000,不允许被其他程序调用
    componentName = ComponentName.unflattenFromString("com.samsung.android.sm/.app.dashboard.SmartManagerDashBoardActivity");
   } else if (getMobileType().equals("HUAWEI")) { // 华为测试通过
    //componentName = new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity");//锁屏清理
    componentName = ComponentName.unflattenFromString("com.huawei.systemmanager/.startupmgr.ui.StartupNormalAppListActivity");//跳自启动管理
    //SettingOverlayView.show(context);
   } else if (getMobileType().equals("vivo")) { // VIVO测试通过
    componentName = ComponentName.unflattenFromString("com.iqoo.secure/.safeguard.PurviewTabActivity");
   } else if (getMobileType().equals("Meizu")) { //万恶的魅族
    //componentName = ComponentName.unflattenFromString("com.meizu.safe/.permission.PermissionMainActivity");//跳转到手机管家
    componentName = ComponentName.unflattenFromString("com.meizu.safe/.permission.SmartBGActivity");//跳转到后台管理页面
   } else if (getMobileType().equals("OPPO")) { // OPPO R8205测试通过
    componentName = ComponentName.unflattenFromString("com.oppo.safe/.permission.startup.StartupAppListActivity");
   } else if (getMobileType().equals("ulong")) { // 360手机 未测试
    componentName = new ComponentName("com.yulong.android.coolsafe", ".ui.activity.autorun.AutoRunListActivity");
   } else {
    // 将用户引导到系统设置页面
    if (Build.VERSION.SDK_INT >= 9) {
     Log.e("HLQ_Struggle", "APPLICATION_DETAILS_SETTINGS");
     intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
     intent.setData(Uri.fromParts("package", context.getPackageName(), null));
    } else if (Build.VERSION.SDK_INT <= 8) {
     intent.setAction(Intent.ACTION_VIEW);
     intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
     intent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());
    }
   }
   intent.setComponent(componentName);
   context.startActivity(intent);
   if (getMobileType().equals("Xiaomi")) {
    showtip();//显示弹窗(**特别注意**)
   }
   if (getMobileType().equals("samsung")){
    new SettingOverlayView().show(context);//显示悬浮窗
   }

  } catch (Exception e) {//抛出异常就直接打开设置页面
   Log.e("HLQ_Struggle", e.getLocalizedMessage());
   intent = new Intent(Settings.ACTION_SETTINGS);
   context.startActivity(intent);
  }
 }

//小米手机显示弹窗
 private void showtip() {
  try {
   dialog_per=new SettingDialogPermision(context, R.style.CustomDialog4);
   dialog_per.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);//注意这里改成吐司类型
   dialog_per.show();
   Log.e("HLQ_Struggle","显示弹窗");
  } catch (Exception e) {
   e.printStackTrace();
   Log.e("HLQ_Struggle", "没有显示弹窗"+e.getMessage());
  }
 }
}

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

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

思路如下:

①首先判断当前的机型

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

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

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

getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST)

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

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

在问题2的第4步解决

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

逻辑梳理:

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

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

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

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

protected void onRestart() {
  super.onRestart();
  Intent intent = new Intent(SelfStartAcitity.this,MainActivity.class);
  startActivity(intent);
  overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
  finish();
 }

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

以上这篇android引导用户开启自启动权限的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Android添加用户组及自定义App权限的方法

    Android:4.4.4 一.应用场景 在Android设备上,现在我们外接了一个USB转串口的设备,设备节点是/dev/ttyUSB0: # ls -l /dev/ttyUSB0 crw-rw---- 1 root root 188, 0 /dev/ttyUSB0 信息显示:该设备的用户及其所属组别都是root,root的持有者对该设备具有读写权限.但是,我们的App是被排除在root之外的,总之无法读写该设备. 一个解决方案是:赋予others以读写权限.但是这样,任何其他第三方应用都可以

  • Android的权限设置及自启动设置方法

    在开发项目中,遇到了两大麻烦: 1.涉及到的系统的权限较多(拍照.录音.定位.拨号等). 对于这点,有很多人会拒绝这些权限,那就尴尬了,他们又不懂只会跟我们反应这什么破app,这个不好用,那个不好使,更可恶的是不同手机的系统设置都长不一样,根本就不好跟他们讲在那里进行设置.于是想到解决的办法就是:在app中添加一个设置权限按钮让app直接跳到它的权限设置界面,这就方便多了.代码段如下: /** * 跳转到权限设置界面 */ private void getAppDetailSettingInte

  • Android权限控制之自定义权限

    天哪,这篇文章终于说道如何自定义权限了,左盼右盼,其实这个自定义权限相当easy.为了方便叙述,我这边会用到两个app作为例子示范. Permission App: used to define a new permission 这个作为定义权限的App,我称之为Permission App. Client App: used to access the specified activity of Permission App 这个作为访问上述自定义权限的App,我称之为Client App 先

  • 详解Android运行时权限及APP适配方法

    Android 6.0起,Android加强了权限管理,引入运行时权限概念.对于: 1. Android 5.1(API 22)及以前版本,应用权限必须声明在AndroidManifest.xml中,应用在安装时,Android会列出其所需的所有权限供用户确认安装. 2. Android 6.0(API 23)及以后版本,应用权限必须声明在AndroidManifest.xml中,但权限分为普通权限(Normal Permissions)和危险权限(Dangerous Permissions),

  • 详解Android权限管理之Android 6.0运行时权限及解决办法

    前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以上设备越来越多了,所以Android 6.0 权限适配是必不可少的工作,这里主要介绍一下我们公司是如何做Android 6.0权限适配的. Android 6.0以下非运行时权限: 根据上面博客我们很清楚的知道,Android的权限其实就是为了程序之间更加的安全的访问,所以权限有等级之分,比如:No

  • android引导用户开启自启动权限的方法

    前言: 最近在做项目的过程中遇到了以下一个需求,虽然看起来不难实现,但是在实现的过程中遇到了各种坑,记录一下,今后方便查看!!! 需求: 用户第一次安装APP,点击授权按钮,跳转至授权的页面(不同手机跳转到不同的授权页面),用户授权成功之后,点击返回按钮,直接进入主页面 问题: 1.如何适配不同机型 2.不同机型的授权页面显示不同弹窗(比如三星显示悬浮窗,小米显示弹窗) 3.小米弹窗始终无法显示 4.在授权页面点击返回按钮,怎么直接跳转到主页面 问题1:适配不同机型 这个是借鉴的一篇博文(忘记地

  • Android 6.0 扫描不到 Ble 设备需开启位置权限的方法

    之前做 Ble 开发都是在 Android 6.0 系统以下的版本中进行测试的,今天使用 Android 6.0 的设备测试的时候,发现扫描不到周围的 Ble 设备.后来发现 6.0 需要在应用运行过程中请求位置权限,并且还要打开位置. 动态申请位置权限 ACCESS_COARSE_LOCATION 在 AndroidManifest.xml 文件中加入 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCA

  • Android 代码设置开机自启动App的方法

    有的时候想要用户一旦打开手机.我们的APP就自动运行了. 代码如下: 创建一个监听. /** * create by:sunlei on 2017/7/7 15:48 * e-mail:872822645@qq.com * introduce: */ public class ContentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { I

  • Android 使用地图时的权限请求方法

    在初始化自己位置的时候请求定位权限: Constants.ACCESS_FINE_LOCATION_COMMANDS_REQUEST_CODE是自定义的常量值==0x01 if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { //申请WRITE_EXTERNAL_STORAGE权限 ActivityC

  • Android内部存储改变读取权限的方法

    在开发时,手机先要ROOT,然后在通过代码改变权限. <span style="color:#330033;">public synchronized static boolean getRoot(String paramString) { Process process = null; DataOutputStream os = null; try { process = Runtime.getRuntime().exec("su"); os = ne

  • Android 7.0 SEAndroid app权限配置方法

    1.SEAndroid app分类 SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型): 1)untrusted_app 第三方app,没有Android平台签名,没有system权限 2)platform_app 有Android平台签名,没有system权限 3)system_app 有android平台签名和system权限 从上面划分,权限等级,理论上:untrusted_app < platform_app < syste

  • Linux 怎么实现添加FTP用户并设置权限的方法

    Linux添加FTP用户并设置权限 在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户,命令行状态下,在root用户下: 运行命令:"useradd -d /home/test test" //增加用户test,并制定test用户的主目录为/home/test 运行命令:"passwd test" //为test设置密码,运行后输入两次相同密码 3.更改用

  • Android模拟用户点击的实现方法

    前言 Android模拟用户点击.在自动化测试中可使用的工具. 可以利用adb命令,也可以使用Android SDK中的monkeyrunner工具. win7-64 gitbash 使用adb命令 主要使用input命令 usage: input ... input text <string> input keyevent <key code number or name> input tap <x> <y> input swipe <x1>

  • MYSQL开启远程访问权限的方法

    1.登陆mysql数据库 mysql -u root -p 查看user表 mysql> use mysql; Database changed mysql> select host,user,password from user; +--------------+------+-------------------------------------------+ | host | user | password | +--------------+------+--------------

  • Android开发之permission动态权限获取详解

    Android开发之permission动态权限获取,供大家参考,具体内容如下 说明 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在运行时根据用户的需要动态授予.这样就不需要在安装时被强迫同意某些权限. 设备系统是 Android 6.0 (API 23) 或更高版本,并且应用的 targetSdkVersion 是 23 或更高版本,则针对在 Andro

随机推荐