使用 protectionLevel 签名定义如下所示的权限,此 WRITE 权限将仅限于使用相同私钥签名的应用程序
<permission android:name="com.yourapp.WRITE.PERMISSION"
android:protectionLevel="signature"
android:label="@string/permission_label"
android:description="@string/permission_desc">
</permission>
<permission android:name="com.yourapp.READ.PERMISSION"
android:label="@string/permission_label"
android:description="@string/permission_desc">
</permission>
然后在 contentprovider 标签中使用读写权限标签。您可以强制执行读取权限,也可以完全删除它
android:readPermission="com.yourapp.READ.PERMISSION"
android:writePermission="com.yourapp.WRITE.PERMISSION"
因此,只有由相同签名签名的应用才能使用您的内容提供商
编辑:
也许你可以用这个
private Collection<String> getCallingPackages() {
int caller = Binder.getCallingUid();
if (caller == 0) {
return null;
}
return Lists.newArrayList(mContext.getPackageManager().getPackagesForUid(caller));
}
并检查您的包名是否出现在此列表中。我认为这是安全的