Monodroid应用程序中的活动访问限制实现

时间:2012-05-03 10:49:16

标签: android xamarin.android

我有一个要求,我需要限制对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。

我想知道这个问题的方向/解决方案。 感谢

2 个答案:

答案 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>

上述任何一种解决方案都有效,只有我不知道哪种/两种都是正确的做法。