悬浮窗——判断及跳转(包含OPPO 5.1 系统等)
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.同一功能的两种显示效果
第一种:会进入到悬浮窗权限应用列表
使用以下代码,会进入到悬浮窗权限的列表,列表中是手机中需要悬浮窗权限的应用列表,你需要在此列表中找到自己的应用,然后点进去,才可以打开悬浮窗权限
Intent intent2 = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(intent2);
第二种:直接进入到自己应用的悬浮窗权限开启界面
使用以下代码,则不会到上述所说的应用列表,而是直接进入到自己应用的悬浮窗权限开启界面
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
Build.VERSION.SDK_INT>= Build.VERSION_CODES.O//8.0以上,建议用第一种
Build.VERSION.SDK_INT>= Build.VERSION_CODES.M//6.0-8.0,建议用第二种
参考网址: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 系统等)相关推荐
- Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了
机型多杂,适配无法完全兼容,不如换种实现方式,性能比悬浮窗好,不需要权限,效果更好:https://blog.csdn.net/m0_38058826/article/details/10399339 ...
- android适配华为m5,2019-05-29 Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了...
兼容8.0,小米,魅族,华为等难适配机型都可完美适配. 悬浮窗插入接口 在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去. Android的界面绘制,都是通过WindowMan ...
- autojs悬浮窗权限申请和判断
下面展示一些 内联代码片. 大家好,今天跟大家分享autojs悬浮窗权限的申请和判断,autojs小学生一名,大佬轻拍.对您有帮助的话,帮忙点个赞.有什么要交流的可以私信我,谢谢! 代码如下: &qu ...
- 教你如何在Android 6.0上创建系统悬浮窗
郭霖大神的文章:http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650235949&idx=1&sn=0f7eded ...
- Android桌面悬浮窗仿QQ手机管家加速效果
主要还是用到了WindowManager对桌面悬浮进行管理. 需要一个火箭的悬浮窗 一个发射台悬浮窗 ,判断火箭是否放到了发射台,如果放上了,则使用AsyTask 慢慢将火箭的图片往上移.结束后., ...
- Android中自定义悬浮窗
有时候,我们可能会需要制作一个始终悬浮的窗口显示一些关键信息.它独立于我们的页面,可以在不妨碍用户操作的情况下显示信息.这里我们就学习一下悬浮窗的做法. 1.WindowManager的常用方法 ge ...
- uniapp 来电显示悬浮窗插件(支持锁屏来电) Ba-CallerID
简介(下载地址) Ba-CallerID 是一款来电显示悬浮窗插件插件. 支持显示.隐藏 支持锁屏来电显示 支持自定义位置显示(上.中.下) 支持拖动(这版不支持,需要的话可以加) 支持申请.判断悬浮 ...
- Android 悬浮窗,绝对是目前相关悬浮窗开源库最完美的适配方案
PerfectFloatWindow 项目地址:Alonsol/PerfectFloatWindow 简介: android 全局悬浮窗,目前已经适配华为,小米,vivo,oppo,一加,三星,魅族, ...
- 安卓手机无障碍模式怎么关闭_安卓手机开启无障碍功能与悬浮窗的方法
怎么开启辅助服务? 使用优Q的功能必须开服辅助服务,辅助服务是安卓官方提供的功能. 打开优Q点击[我的]点击权限设置,开启即可.如果无法快速开启,请参考如下的方法. 部分手机辅助可通过快捷键开启,优Q ...
最新文章
- 终端bash美化(FC)
- 百度大脑金秋九月CV盛典,人脸识别新产品及伙伴计划发布会压轴开启
- rocketmq python 一个进程订阅多个topic_玩转不同业务场景,这些RabbitMQ特性会是得力助攻...
- java 不同数据类型之间的转换
- 依赖注入之Autofac使用总结
- android 原生砸金蛋 动画,C4D-砸金蛋动画效果制作
- Objective-C策略模式(Strategy)
- 自学python需要什么_自学Python编程有什么要求
- easyui combobox 左匹配模糊查询
- mysql利用内存表导入数据_Mysql 大量数据导入
- Android 学习笔记【基础扫盲篇】
- 没有计算机基础可以学python-Python入门必看篇(面向小白)想学Python只看这一篇就够了...
- 蚂蚁课堂视频笔记思维导图-3期 八、互联网安全架构
- 制图折断线_机械制图的截断线与折断线的区别是什么?
- svn的图标突然不显示了
- pyCharm最新2018.2激活 附激活文件/教育版免费使用
- Java 在PPT中添加文本水印的简易方法(单一/平铺水印)
- 网易考拉海购软件测试岗怎么样,【网易考拉海购前端开发工资待遇怎么样】-看准网...
- python特征提取方法_大师兄的Python机器学习笔记:特征提取
- 关于Java使用POI对Excel2003和2007的导入和导出
热门文章
- 关于Fatal NI connect error 12170
- python excel筛选统计_懂点EXCEL就行!教你利用Python做数据筛选(上)
- 基于TensorRT的神经网络推理与加速
- 随心所欲的“四舍五入” 之 ROUNDDOWN函数如何使用?
- 标准柯西分布_柯西分布没有数学期望
- Windows 10出现0xc0000225错误代码如何解决?
- js事件坐标大乱斗:screenX、clientX、pageX、offsetX
- underscoreJs中pluck函数的源码解析
- cv2 改变图片大小 resize
- python 证件照换背景色(蓝底->白底,蓝底->红底)