AndroidDev 板


LINE

※ 引述《issuemylove (NotLove)》之铭言: : 想请问大大们 : 最近写了个有浮动视窗功能的应用 : 但是小米手机在 pop-window 的部份需要手动开启权限 (可参考下图) : http://imgur.com/9KFJNkP : 请问有办法可以得知说 : 该权限是否开启了吗? : PS. 我是有在activity呼叫 : checkCallingOrSelfPermission(permission.SYSTEM_ALERT_WINDOW) 相关的code : 但是该小米手机中的pop-window跟 system_alert_window相关的权限好像无关 : 无法靠它为依据 或是我哪边搞错了QQ : 谢谢大大们的指点! 前阵子也为了这鬼东西烦恼...於是终於在对岸找到一个比较好的solution 会用到AppOpsManager来做检查,这东西是API 19之後的 当然小米也是在19之後才有这鬼东西 方法如下 /** * 判断小米pop-up权限是否打开 * @param context * @return boolean */ @TargetApi(Build.VERSION_CODES.KITKAT) public static boolean isMiuiFloatWindowOpAllowed(Context context) { final int version = Build.VERSION.SDK_INT; if (version >= 19) { //AppOpsManager.OP_SYSTEM_ALERT_WINDOW = 24 return checkOp(context, 24); } else { if ((context.getApplicationInfo().flags & 1<<27) == 1) { return true; } else { return false; } } } /** * 检查某权限是否开启 * @param context * @param op 权限代号 * @return boolean * */ @TargetApi(Build.VERSION_CODES.KITKAT) public static boolean checkOp(Context context, int op) { final int version = Build.VERSION.SDK_INT; if (version >= 19) { AppOpsManager manager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); try { Class clazz = AppOpsManager.class; Method dispatchMethod = clazz.getMethod("checkOp", new Class[] { int.class, int.class, String.class }); int mode = (Integer) dispatchMethod.invoke(manager, new Object[] { op, Binder.getCallingUid(), context.getApplicationContext().getPackageName() }); if (AppOpsManager.MODE_ALLOWED == mode) { return true; } else { return false; } } catch (Exception e) { e.printStackTrace(); } } else { Log.e(TAG,"Below API 19 cannot invoke!"); } return false; } 基本上是这样,然後检查时 呼叫isMiuiFloatWindowOpAllowed(mContext) 然後我会在配合一个开应用程式详细资讯的~做个dialog然後提醒 是就打开(自动跳去应用程式资讯),不要就略过 同场加映,打开应用程式资讯 /** * 开启应用程式资讯 * @param context * @param packageName */ public static void showInstalledAppDetails(Context context, String packageName) { Intent intent = new Intent(); final int apiLevel = Build.VERSION.SDK_INT; if (apiLevel >= 9) { // 2.3(API 9)以上,使用SDK提供的方法 intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", packageName, null); intent.setData(uri); } else { // 2.3以下,使用非公开的方法(查看InstalledAppDetails源码) // 2.2和2.1中,InstalledAppDetails使用的APP_PKG_NAME也不同,所以分开做。 final String appPkgName = (apiLevel == 8 ? "pkg" : "com.android.settings.ApplicationPkgName"); intent.setAction(Intent.ACTION_VIEW); intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); intent.putExtra(appPkgName, packageName); } context.startActivity(intent); } 以上,希望能帮到你:) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 112.105.65.41
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1436290155.A.903.html ※ 编辑: danny2529 (112.105.65.41), 07/08/2015 01:30:03
1F:推 issuemylove: 谢谢分享!!!回去研究~~~! 07/08 12:32







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP