一.先说说需求
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: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>
|
就是指要有"youxz.permission.COMMSVC"权限的app才能访问
3) APP使用权限调用Service
在自已要访问Service的项目的AndroidManifest.xml申请权限
<uses-permission android:name="youxz.permission.COMMSVC"/>
|
五.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"/>
|
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发消息方需要的权限