Android中代码动态判断是否开启悬浮窗权限和申请悬浮窗权限

1.在AndroidManifest.xml中申请权限

<!-- 要获取CompatModeWrapper,首先得在应用程序的AndroidManifest.xml文件中添加权限 -->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

2.判断悬浮窗权限是否开启

 public static boolean checkFloatPermission(Context context) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)return true;if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {try {Class cls = Class.forName("android.content.Context");Field declaredField = cls.getDeclaredField("APP_OPS_SERVICE");declaredField.setAccessible(true);Object obj = declaredField.get(cls);if (!(obj instanceof String)) {return false;}String str2 = (String) obj;obj = cls.getMethod("getSystemService", String.class).invoke(context, str2);cls = Class.forName("android.app.AppOpsManager");Field declaredField2 = cls.getDeclaredField("MODE_ALLOWED");declaredField2.setAccessible(true);Method checkOp = cls.getMethod("checkOp", Integer.TYPE, Integer.TYPE, String.class);int result = (Integer) checkOp.invoke(obj, 24, Binder.getCallingUid(), context.getPackageName());return result == declaredField2.getInt(cls);} catch (Exception e) {return false;}} else {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {AppOpsManager appOpsMgr = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);if (appOpsMgr == null)return false;int mode = appOpsMgr.checkOpNoThrow("android:system_alert_window", android.os.Process.myUid(), context.getPackageName());return mode == AppOpsManager.MODE_ALLOWED || mode == AppOpsManager.MODE_IGNORED;} else {return Settings.canDrawOverlays(context);}}}

3.使用

 String androidSDK = Build.VERSION.SDK;if(Integer.parseInt(androidSDK)>=23&&!Settings.canDrawOverlays(LoginActivity.this)){Intent intent2 = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);startActivityForResult(intent2,1);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 1){if (PermissionUtils.checkFloatPermission(this)){System.out.println("悬浮窗权限申请成功...");}else{System.out.println("悬浮窗权限申请失败...");finish();}}}

4.同一功能的两种显示效果

  1. 第一种:会进入到悬浮窗权限应用列表

  2. 使用以下代码,会进入到悬浮窗权限的列表,列表中是手机中需要悬浮窗权限的应用列表,你需要在此列表中找到自己的应用,然后点进去,才可以打开悬浮窗权限

  3. Intent intent2 = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);

  4. startActivity(intent2);

  5. 第二种:直接进入到自己应用的悬浮窗权限开启界面

  6. 使用以下代码,则不会到上述所说的应用列表,而是直接进入到自己应用的悬浮窗权限开启界面

  7. Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);

  8. intent.setData(Uri.parse("package:" + getPackageName()));

  9. startActivity(intent);

  10. Build.VERSION.SDK_INT>= Build.VERSION_CODES.O//8.0以上,建议用第一种

  11. Build.VERSION.SDK_INT>= Build.VERSION_CODES.M//6.0-8.0,建议用第二种

  12. 参考网址:https://blog.csdn.net/eyishion/article/details/82787310

参考网址:https://blog.csdn.net/lovedou0816/article/details/79253710

https://blog.csdn.net/aidou1314/article/details/88422007

第一篇《完》

---------------------------------------------------分割线-----------------------------------------------------------------

第二篇《开始》

Android 解决OPPO 5.1 浮窗权限不兼容问题

OPPO 5.1 浮窗权限开启并不像大多Android机那样在手机设置中,而是在OPPO的系统软件-手机安全中心-中,

故跳转到权限界面,需要做特殊处理。

1.判断是否为 OPPO 5.1 系统

if(Utils.isOppo() && Utils.getAndroidVersion().equals("5.1")) {
        compat = new OppoCompatImpl();
      } 
2.通过包名、Activity名跳转到指定权限界面

public class OppoCompatImpl extends BelowApi23CompatImpl {
    @Override
    public boolean isSupported() {
        return true;
    }
 
    @Override
    public boolean apply(Context context) {
        try {
            Intent intent = new Intent(Intent.ACTION_MAIN);
            ComponentName componentName = new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.floatwindow.FloatWindowListActivity");
//                    ComponentName componentName = new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.sysfloatwindow.FloatWindowListActivity");// oppo A37型号,能跳转到手机管家悬浮窗设置页
//                    ComponentName componentName = new ComponentName("com.color.safecenter", "com.color.safecenter.permission.PermissionManagerActivity");
            intent.setComponent(componentName);
            context.startActivity(intent);
            return true;
        } catch(Exception e){
            e.printStackTrace();
        }
        return false;
    }
}

————————————————
版权声明:本文为CSDN博主「Yurja_Lee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38193813/article/details/80621459

如果有不当的地方,欢迎指正。感谢以上博主,谢谢!

如有侵权等不妥的地方,请各位博主评论区留言,本人看到会立刻处理。再次感谢!

悬浮窗——判断及跳转(包含OPPO 5.1 系统等)相关推荐

  1. Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了

    机型多杂,适配无法完全兼容,不如换种实现方式,性能比悬浮窗好,不需要权限,效果更好:https://blog.csdn.net/m0_38058826/article/details/10399339 ...

  2. android适配华为m5,2019-05-29 Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了...

    兼容8.0,小米,魅族,华为等难适配机型都可完美适配. 悬浮窗插入接口 在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去. Android的界面绘制,都是通过WindowMan ...

  3. autojs悬浮窗权限申请和判断

    下面展示一些 内联代码片. 大家好,今天跟大家分享autojs悬浮窗权限的申请和判断,autojs小学生一名,大佬轻拍.对您有帮助的话,帮忙点个赞.有什么要交流的可以私信我,谢谢! 代码如下: &qu ...

  4. 教你如何在Android 6.0上创建系统悬浮窗

    郭霖大神的文章:http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650235949&idx=1&sn=0f7eded ...

  5. Android桌面悬浮窗仿QQ手机管家加速效果

    主要还是用到了WindowManager对桌面悬浮进行管理. 需要一个火箭的悬浮窗 一个发射台悬浮窗  ,判断火箭是否放到了发射台,如果放上了,则使用AsyTask 慢慢将火箭的图片往上移.结束后., ...

  6. Android中自定义悬浮窗

    有时候,我们可能会需要制作一个始终悬浮的窗口显示一些关键信息.它独立于我们的页面,可以在不妨碍用户操作的情况下显示信息.这里我们就学习一下悬浮窗的做法. 1.WindowManager的常用方法 ge ...

  7. uniapp 来电显示悬浮窗插件(支持锁屏来电) Ba-CallerID

    简介(下载地址) Ba-CallerID 是一款来电显示悬浮窗插件插件. 支持显示.隐藏 支持锁屏来电显示 支持自定义位置显示(上.中.下) 支持拖动(这版不支持,需要的话可以加) 支持申请.判断悬浮 ...

  8. Android 悬浮窗,绝对是目前相关悬浮窗开源库最完美的适配方案

    PerfectFloatWindow 项目地址:Alonsol/PerfectFloatWindow 简介: android 全局悬浮窗,目前已经适配华为,小米,vivo,oppo,一加,三星,魅族, ...

  9. 安卓手机无障碍模式怎么关闭_安卓手机开启无障碍功能与悬浮窗的方法

    怎么开启辅助服务? 使用优Q的功能必须开服辅助服务,辅助服务是安卓官方提供的功能. 打开优Q点击[我的]点击权限设置,开启即可.如果无法快速开启,请参考如下的方法. 部分手机辅助可通过快捷键开启,优Q ...

最新文章

  1. 终端bash美化(FC)
  2. 百度大脑金秋九月CV盛典,人脸识别新产品及伙伴计划发布会压轴开启
  3. rocketmq python 一个进程订阅多个topic_玩转不同业务场景,这些RabbitMQ特性会是得力助攻...
  4. java 不同数据类型之间的转换
  5. 依赖注入之Autofac使用总结
  6. android 原生砸金蛋 动画,C4D-砸金蛋动画效果制作
  7. Objective-C策略模式(Strategy)
  8. 自学python需要什么_自学Python编程有什么要求
  9. easyui combobox 左匹配模糊查询
  10. mysql利用内存表导入数据_Mysql 大量数据导入
  11. Android 学习笔记【基础扫盲篇】
  12. 没有计算机基础可以学python-Python入门必看篇(面向小白)想学Python只看这一篇就够了...
  13. 蚂蚁课堂视频笔记思维导图-3期 八、互联网安全架构
  14. 制图折断线_机械制图的截断线与折断线的区别是什么?
  15. svn的图标突然不显示了
  16. pyCharm最新2018.2激活 附激活文件/教育版免费使用
  17. Java 在PPT中添加文本水印的简易方法(单一/平铺水印)
  18. 网易考拉海购软件测试岗怎么样,【网易考拉海购前端开发工资待遇怎么样】-看准网...
  19. python特征提取方法_大师兄的Python机器学习笔记:特征提取
  20. 关于Java使用POI对Excel2003和2007的导入和导出

热门文章

  1. 关于Fatal NI connect error 12170
  2. python excel筛选统计_懂点EXCEL就行!教你利用Python做数据筛选(上)
  3. 基于TensorRT的神经网络推理与加速
  4. 随心所欲的“四舍五入” 之 ROUNDDOWN函数如何使用?
  5. 标准柯西分布_柯西分布没有数学期望
  6. Windows 10出现0xc0000225错误代码如何解决?
  7. js事件坐标大乱斗:screenX、clientX、pageX、offsetX
  8. underscoreJs中pluck函数的源码解析
  9. cv2 改变图片大小 resize
  10. python 证件照换背景色(蓝底->白底,蓝底->红底)