Android 自定义权限 ( 跨进程调用 Android Service/Broadcast 权限控制)

一.先说说需求

    1)创建Android Service用于共享一个TCP常连接收发数据。
    2)要求只允许我们自已的一个或多个APP访问该服务。
    3)APP与服务之间数据使用广播方式传递,但要数据只能被自已的一个或多个APP获取,也只能接收自已的一个或多个APP发送过来的广播数据。
 
二.实现方法
    1)创建自定义权限,设置权限级别为"signature".
   2)创建数字证书,使证该证书为自已所有的APK安装包签名。
 
 
三.自定义权限
    1) 创建自定义权限
    在AndroidManifest.xml中定义自定义权限
 
 <permission android:protectionLevel="signature" android:name="youxz.permission.COMMSVC"></permission>  
     android:name属性设置自定义权限名称。
     android:protectionLevel属性设置权限级别。
 
     android:protectionLevel 可选项:
    normal:低风险权限,只要申请了就可以使用(在AndroidManifest.xml中添加<uses-permission>标签),安装时不需要用户确认;
    dangerous:高风险权限,安装时需要用户的确认才可使用;
    signature:只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它;
    signatureOrSystem:签名相同,或者申请权限的应用为系统应用(在system image中)。 
 
四.Android Service 权限控制
      1)Service指定自定义权限
 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:permission="youxz.permission.COMMSVC"
         >
       
         <service android:name=".LongConnectionSvc" android:exported="true" android:permission="youxz.permission.COMMSVC">
             <intent-filter >
                 <action android:name="com.youxz.comm.service"/>
             </intent-filter>
         </service>
 
    </application> 
        在application和service中指定 设置属性android:permission="youxz.permission.COMMSVC"
       就是指要有"youxz.permission.COMMSVC"权限的app才能访问
       
     3) APP使用权限调用Service
        在自已要访问Service的项目的AndroidManifest.xml申请权限
<uses-permission android:name="youxz.permission.COMMSVC"/>
     并且该APP打后后的APK签名要一Service的APK签名相同。如果签名不相同也不能访问,所以注意管理好你的证书不要泄漏即可。
 
五.Android Broadcast 广播权限控制
 
  1)发送广播消息,自定义接收都需要的权限
     a)在广播发者的AndroidManifest.xml中定义广播接收者需要的权限
 <permission android:protectionLevel="signature" android:name="youxz.permission.COMMSVC_C_RCV"></permission>  
    b)通过广播传递数据,指定接收者权限,保证数据不安全不被窃取。
intent.setAction("com.youxz.commsvc.client");
intent.putExtra("rcvData", data);
this.context.sendBroadcast(intent, "youxz.permission.COMMSVC_C_RCV"); //第二参数指定接收都权限
 
    2)使用权限接收广播
        在广播接都的项目的AndroidManifest.xml中申请权限
<uses-permission android:name="youxz.permission.COMMSVC_C_RCV"/>
            广播接收者的APK签名必须和广播发送者的签名相同才能接收到。

   3)在接收广播的AndroidManifest.xml中静态注册广播接收器receiver,并指定给当前receiver发消息方需要的权限
<receiver android:name=".SendReceiver" android:permission="youxz.permission.COMMSVC_C_SND">   
        <intent-filter>
                <action android:name="com.youxz.commsvc"/>
       </intent-filter>
</receiver>
   这里的android:permission就是指定给当前reciver发消息方需要的权限
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值