android studio 使用 aidl(三)权限验证
这篇文章是基于android studio 使用 aidl (一) 和 android studio 使用 aidl(二) 异步回调 下面的代码都是简化的,如果看不懂请先移步上2篇文章
网上的东西太坑,找了半天也没有找到详细一点的,没办法只能自己一点一点的试。。
第一步:首先需要在服务端的在AndroidMenifest中声明所需权限
<permission
android:name="com.txy.umpay.aidl.permission.OPERATION_HARDWARE"
android:protectionLevel="normal" />
<uses-permission android:name="com.txy.umpay.aidl.permission.OPERATION_HARDWARE" />
第一种方法在Service中的onBind方法中处理:
public IBinder onBind(Intent t) {
Log("service on bind");
//第一种远程调用的验证方式
int check = checkCallingPermission("com.txy.umpay.aidl.permission.OPERATION_HARDWARE");
if (check == PackageManager.PERMISSION_DENIED) {
Log("客户端没有权限调用");
return null;
}
return mBinder;
}
这种客户端如果没有在应用中声明<uses-permission android:name="com.txy.umpay.aidl.permission.OPERATION_HARDWARE" />
权限 就会绑定失败,这种方式一直不成功不知道为什么!
第二种方法就是在ITaskBinder.Stub mBinder = new ITaskBinder.Stub() 的onTransact(int code, Parcel data, Parcel reply, int flags)方法中,我感觉这个方法就相当于一个拦截器,只要客户端调用ITaskBinder的方法就会先触发onTransact这个方法,这个方法返回boolean值 返回false则其他方法就调用不成功了。
//在这做权限验证,类似拦截器
public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
throws RemoteException {
Log("这是拦截器!code:" + code + "---flags:" + flags);
String packageName = null;
String[] packages = getPackageManager().
getPackagesForUid(getCallingUid());
if (packages != null && packages.length > 0) {
packageName = packages[0];
}
if (packageName == null) {
return false;
}
boolean checkPermission = checkPermission(MAIDLService.this, "com.txy.umpay.aidl.permission.OPERATION_HARDWARE", packageName);
if (!checkPermission) {
return false;
}
return super.onTransact(code, data, reply, flags);
}
private boolean checkPermission(Context context, String permName, String pkgName) {
PackageManager pm = context.getPackageManager();
if (PackageManager.PERMISSION_GRANTED == pm.checkPermission(permName, pkgName)) {
return true;
} else {
return false;
}
}
客户端AndroidManifest.xml中添加权限:
<uses-permission android:name="com.txy.umpay.aidl.permission.OPERATION_HARDWARE" />
在来看下客户端是怎么 调用的
private void open1() {
try {
if (service != null) {
service.unregisterCallback(mCallback);
}else{
Log.e("123","绑定失败!");
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
private void open() {
try {
if (service != null) {
service.registerCallback(mCallback);
}else{
Log.e("123","绑定失败!");
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
android studio 使用 aidl(三)权限验证的更多相关文章
- android studio 使用 aidl(二)异步回调
基础使用请移步 android studio 使用 aidl (一) 首先建立在server端建立两个aidl文件 ITaskCallback.aidl 用于存放要回调client端的方法 // IT ...
- android studio 使用 aidl(一)基础用法
最近公司需要开发一个项目用的到aidl,之前研究过eclipse版本的,但是好久了一直没用,现在需要捡起来,但是现在都用android studio了,所以查了下资料 都不是很全,我在这里总结一下,方 ...
- Android Studio系列教程三--快捷键
Android Studio系列教程三--快捷键 2014 年 12 月 09 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzhang.com/ ...
- 【转载】Android Studio Service AIDL 详解
公司产品之前IM这块存在很多问题,消息到达率低,加上协议上有些问题,丢消息频繁,所以需要重构IM,AIDL不能解决以上问题.好吧!那AIDL可以解决什么问题?什么是AIDL? 什么是AIDL? AID ...
- Android studio 使用心得(三)—从Eclipse迁移到Android studio
断断续续的也算是把eclipse上的代码成功迁移到android studio上来了,现在,我同事继续用eclipse,我用android studio,svn上还是之前eclipse的项目,迁移成功 ...
- Android Studio模拟器的root权限
前言 一个安卓练习中用自带的sqlite3数据库查看数据的时候,需要通过adb shell进入/data/data/[包名]/databases/目录中,通过查看创建的数据库来查看相应的数据或者表.起 ...
- Android Studio 学习笔记(三):简单控件及实例
控件.组件.插件概念区分 说到控件,就不得不区分一些概念. 控件(Control):编程中用到的部件 组件(Component):软件的组成部分 插件(plugin): 应用程序中已经预留接口的组件 ...
- Android Studio精彩案例(三)《模仿微信ViewPage+Fragment实现方式二》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 写在前面的话:此专栏是博主在工作之余所写,每一篇文章尽可能写的思路清晰一些,属于博主的"精华"部分,不同于以往专栏 ...
- Android Studio 学习(三) 广播
动态注册监听网络变化 创建intentFilter 并addAction 代表了监听哪个广播 然后使用registerReceiver()方法 将intentFilter 与 自己创建的监听器 传进去 ...
随机推荐
- Forest v1.5.12 发布,声明式 HTTP 框架,已超过 1.6k star
Forest介绍 Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL.Header 以及 Body 等信息)绑定到您自定义的 Interfac ...
- Linux部署Apollo+.Net Core简单使用
Apollo官方网站非常详细,以下只是本人学习过程的整理 一.概念 Apollo(阿波罗)是一款可靠的分布式配置管理中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并 ...
- Redis安装、配置和卸载
1.安装 mkdir /usr/local/redis 添加目录 wget [http://download.redis.io/releases/redis-4.0.1](http://downloa ...
- 启用或禁用普通用户Exchange Online PowerShell功能
默认情况下,允许在 Microsoft 365 中创建的所有帐户都可以使用 Exchange Online PowerShell.管理员可以使用 Exchange Online PowerShell ...
- 羽夏看Win系统内核——SourceInsight 配置 WRK
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- RedHat 7.0 Linux 下划分区,分区加密,配额,逻辑卷管理
1:如何划分区: 1:明确分区的对象:xxx :fdisk /dev/xxx 2:增加一个分区:n:选择主分区或者扩展分区,"p" or "e" :默认地方开始 ...
- webpack 配置devServer 服务器
webpack 配置devServer 服务器 /** * loader: 1. 下载 2. 使用(配置) * plugins:1. 下载 2. 引入 3.使用 */ // 用来拼接绝对路径的方法 c ...
- Swift-Framework Error(一)桥接文件
摘要 Xcode 编译工程代码时,出现编译错误时除了红色图标外,还会附送几句英文文本. 常规操作拷贝英文文本,放到搜索框中找答案,但是读懂这几句话能事半功倍. 项目中如果有 OC 和 Swift 两种 ...
- java.lang.NoSuchFieldError: REFLECTION
2020-09-14 09:13:21.415 INFO org.apache.cxf.service.factory.ReflectionServiceFactoryBean Line:457 - ...
- Mastering-VSCode
中英文等宽 14寸1920x1080, Win10, 设置如下(前两个字体就够了), 字号14,16都可以. 需要下载UbuntuMono字体. 如果分表率低如14寸1366x768,可尝试 Inco ...