android

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);
        }
    };
上一篇 下一篇

猜你喜欢

热点阅读