我有一个要求,我需要限制对Monodroid应用程序活动的访问。因此我尝试了一个尖峰,其中应用程序 IntentSayHello 将具有名为 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 。
权限拒绝:启动Intent {act = companyXYZ.intent.sayhello.MAIN typ = vnd.companyXYZ.say.hello / vnd.companyXYZ.activity cmp = IntentSayHello.IntentSayHello / intentsayhello.SayHelloActivity} 来自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。
我想知道这个问题的方向/解决方案。 感谢
答案 0 :(得分:0)
在谷歌搜索后,点击此页面:http://lists.ximian.com/pipermail/mono-bugs/2011-January/108218.html
我从这个页面中获取了需要放入客户端 AssemblyInfo.cs 的提示。语法如下:
// Add some common permissions, these can be removed if not needed
[assembly:UsesPermission(“intentsayhello.permission.SAYHELLO”)]
[assembly:UsesPermission(Android.Manifest.Permission.Internet)]
从那时起它就起作用了。
答案 1 :(得分:0)
在单声道Android论坛中进一步搜索,我发现另一种方法是在.csproj文件中明确添加androidmanifest.xml,如下所示:
<PropertyGroup>
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
</PropertyGroup>
上述任何一种解决方案都有效,只有我不知道哪种/两种都是正确的做法。