android permiss manager (安全软件获取权限 禁用 可用 提示状态)
来源:互联网 发布:apache运行php文件 编辑:程序博客网 时间:2024/05/29 09:44
这两天老大发话说要我研究一下安卓安全软件的功能,先抽取了一个小模块,研究权限管理
一开始就去packagemanager 去看发现有几个方法:
就先去看了一下IPackagemanager 里面的方法:
有很多 这里我之列出跟权限有关的
PermissionInfo getPermissionInfo(String name, int flags); List<PermissionInfo> queryPermissionsByGroup(String group, int flags); PermissionGroupInfo getPermissionGroupInfo(String name, int flags); List<PermissionGroupInfo> getAllPermissionGroups(int flags); int checkPermission(String permName, String pkgName); int checkUidPermission(String permName, int uid); boolean addPermission(in PermissionInfo info); void removePermission(String name); void grantPermission(String packageName, String permissionName); void revokePermission(String packageName, String permissionName); String[] getAppOpPermissionPackages(String permissionName);ParceledListSlice getPackagesHoldingPermissions(in String[] permissions, int flags, int userId); boolean addPermissionAsync(in PermissionInfo info); void setPermissionEnforced(String permission, boolean enforced);
看安全软件上的功能:
通过包名找权限
通过权限找包名
禁用 提示 允许 三种状态
首先:就发现了2个方法:
void removePermission(String name);void grantPermission(String packageName, String permissionName);我很高兴的就开始写代码了 测试结果:java.lang.SecurityException: Can't change android.permission.INTERNET. It is required by the application一直报这个错 开始以为是华为手机原因,用小米手机测 也有,我就开始怀疑了,状态有三种 而我出错了 就算对了,也只有两种状态其实查到了是需要检查权限,源码就不贴了,可以通过hook的方式,猜测把源码修改一下也可以用,目前这种方案先放弃。还有一个情况就算PackageManager 类中:getPackageInfo方法PackageInfo可以拿到requestedPermissions 所有的申请的权限,而安全软件上的权限只有一部分,我开始以为通过某种方式过滤掉一部分。
测试了一段时间 我就发现可能不是这个原因,肯定是我的思路错了。
我又去网上查了一部分资料:看到这个类AppOpsManager 我就明白了 我找到相应的服务端代码IAppOpsService:
interface IAppOpsService { // These first methods are also called by native code, so must // be kept in sync with frameworks/native/include/binder/IAppOpsService.h int checkOperation(int code, int uid, String packageName); int noteOperation(int code, int uid, String packageName); int startOperation(IBinder token, int code, int uid, String packageName); void finishOperation(IBinder token, int code, int uid, String packageName); void startWatchingMode(int op, String packageName, IAppOpsCallback callback); void stopWatchingMode(IAppOpsCallback callback); IBinder getToken(IBinder clientToken); // Remaining methods are only used in Java. int checkPackage(int uid, String packageName);<span style="color:#FF0000;">List<AppOpsManager.PackageOps> getPackagesForOps(in int[] ops);</span><span style="color:#FF0000;"> List<AppOpsManager.PackageOps> getOpsForPackage(int uid, String packageName, in int[] ops); void setMode(int code, int uid, String packageName, int mode);</span> void resetAllModes(int reqUserId, String reqPackageName); int checkAudioOperation(int code, int usage, int uid, String packageName); void setAudioRestriction(int code, int usage, int uid, int mode, in String[] exceptionPackages); void setUserRestrictions(in Bundle restrictions, int userHandle); void removeUser(int userHandle);}它通过mode的方式来设置状态,
可以通过包名获取权限
也可以通过权限获取包名
更重要的是返回权限不是全部的 会根据级别 系统写好的返回给你
你可以根据权限做个分级,这一切就明朗了。
0 0
- android permiss manager (安全软件获取权限 禁用 可用 提示状态)
- android:利用滤镜制作按钮的禁用与可用状态
- Angular解决输入框由禁用状态转可用状态自动获取焦点失效问题
- Android6.0动态权限(获取权限提示框允许与拒绝状态信息)
- android Download Manager被禁用
- 【Android】Android permiss…
- fedora获取root登录权限(解决ROOT被禁用)
- (不ROOT/不安装软件/安全)--Android/安卓手机手动冻结/禁用系统应用方法
- Android程序的安全系统 获取系统权限
- Android -- 程序判断手机ROOT状态,获取ROOT权限
- Android 获取可用内存大小
- Android 安全和权限
- Android安全机制--权限
- android安全架构-权限
- android 权限复制即可用
- iOS各种权限状态获取
- Android-----状态烂提示(Notification、NotificationManager)
- Android自定义控件(状态提示图表)
- oracle数据迁移快速导入导出:利用sqluldr2导出数据和sqlldr导入数据的方法
- 第十四周项目:程序阅读(三)
- 请使用 -Xlint:deprecation 重新编译
- Ubuntu镜像下载
- 设置sessionStorage和localStorage的过期时间
- android permiss manager (安全软件获取权限 禁用 可用 提示状态)
- Android中Service(服务)详解
- java生成execl下拉列表
- Hyper如何同时支持OLAP和OLTP业务
- 文本框只能输入特定内容如文本框只能输入数字
- pat-5-34 通讯录的录入与显示
- Java常用类
- Cocos2d-Js ctor init onEnter的区别
- android Fragment 简单的使用