IPC 进行权限验证
2020-05-06 本文已影响0人
静享时光
我们的运远程服务是不希望任何人都可以访问的。所以需要进行权限验证。
方法一,在Binder中验证
自定义权限
<permission
android:name="com.example.jinghuang.demo2020.ACCESS_BOOK_SERVICE"
android:protectionLevel="normal" />
添加权限
<uses-permission android:name="com.example.jinghuang.demo2020.ACCESS_BOOK_SERVICE" />
进行权限验证
@Nullable
@Override
public IBinder onBind(Intent intent) {
int check = checkCallingOrSelfPermission("com.example.jinghuang.demo2020.ACCESS_BOOK_SERVICE");
//没有权限直接返回null
if (check == PackageManager.PERMISSION_DENIED) {
return null;
}
return mBinder;
}
方法二、通过服务端的onTransact方法,通过uid来校验
第一步,需要申请权限,具体的看方法一
第二步,添加权限
第三步,使用
@Override
public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
int check = checkCallingOrSelfPermission("com.example.jinghuang.demo2020.ACCESS_BOOK_SERVICE");
//没有权限直接返回null
if (check == PackageManager.PERMISSION_DENIED) {
return false;
}
String pacakName = null;
String[] packagesForUid = getPackageManager().getPackagesForUid(getCallingUid());
if (packagesForUid != null && packagesForUid.length > 0) {
pacakName = packagesForUid[0];
}
if (EmptyUtils.isNoEmpty(pacakName) && !pacakName.startsWith("com.example.")) {
return false;
}
return super.onTransact(code, data, reply, flags);
}
};