Android判断手机中的应用是否具有某些权限(例如小米手机中是否具有悬浮窗权限)
16lz
2021-01-24
Android原生权限管理:AppOps
op 的值是 0 ~ 47,其中0代表粗略定位权限,1代表精确定位权限,24代表悬浮窗权限。(具体可以看看android源码在android.app下就有个AppOpsManager类)
uid 当前应用用到的uid ,可通过 Binder.getCallingUid()获得。packageName 应用程序的包名,通过getPackageName获得。
通过上面的知识,写一函数 用来判断 程序是否具有某些权限的函数
private static int checkOp(Context context, int op){ final int version = Build.VERSION.SDK_INT; if (version >= 19){ Object object = context.getSystemService("appops"); Class c = object.getClass(); try { Class[] cArg = new Class[3]; cArg[0] = int.class; cArg[1] = int.class; cArg[2] = String.class; Method lMethod = c.getDeclaredMethod("checkOp", cArg); return (Integer) lMethod.invoke(object, op, Binder.getCallingUid(), context.getPackageName()); } catch(NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } return -1; }
调用上面的函数,返回 0 就代表有权限,1代表没有权限,-1函数出错啦
详细情况请参考:http://blog.csdn.net/a_long_/article/details/51987145
更多相关文章
- C语言函数的递归(上)
- Android(安卓)修改权限
- Android之Camera的简单实例
- android6.0下载路径设置
- android activity 生命周期详解
- 通过JNI实现c/c++和Android的java层函数互调
- Android几个面试题解答
- 可视化操作Android的SQLite数据库
- Cocos2d-x学习之创建Android工程和编译