我有一个要求,我需要限制对 Monodroid 应用程序活动的访问。因此,我尝试了一个峰值,应用程序IntentSayHello将有一个访问受限的 Activity,称为SayHelloActivity。作为第一步,我在应用程序的AndroidManifest.xml中定义了权限标签,如下所示:
...
...
</application>
<permission
android:name="intentsayhello.permission.SAYHELLO"
android:protectionLevel="signature" android:label="@string/permlbl_restricted"
android:description="@string/permdesc_restricted">
</permission>
</manifest>
请注意,我使用的是protectionLevel = signature,这意味着使用与 IntentSayHello 相同的证书签名的任何其他应用程序只能访问受限活动。
现在我将 SayHelloActivity 编码如下:
[Activity(Label = "SayHelloActivity", MainLauncher = true, Icon = "@drawable/icon", Permission = "intentsayhello.permission.SAYHELLO")]
[IntentFilter(new string[] { "companyXYZ.intent.sayhello.MAIN" },Categories = new string[]{Intent.CategoryDefault},
DataMimeType = "vnd.companyXYZ.say.hello/vnd.companyXYZ.activity")]
public class SayHelloActivity : Activity
{
.....
.....
}
在此之后,我通过隐式意图调用 IntentSayHello 的 SayHelloActivity 来测试客户端应用程序,并且我得到了预期的SecurityException 。
权限拒绝:从 ProcessRecord{4094f850 9126:DiffKeyHello.DiffKeyHello/ 10097}(pid=9126,uid=10097)需要intentsayhello.permission.SAYHELLO
现在,如果我希望我的客户端应用程序能够访问受限应用程序的 SayHelloActivity,我应该使用相同的密钥库(证书)签署我的客户端应用程序,并在客户端应用程序的 AndroidManifest.xml 中提及如下:
...
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="intentsayhello.permission.SAYHELLO" />
</manifest>
但是当我同时执行这两个操作时,客户端应用程序仍然无法调用 SayHelloActivity 并引发相同的 SecurityException。
我想知道这个问题的方向/解决方案。谢谢