0

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

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

4

2 回答 2

0

在mono android论坛中进一步搜索,我发现另一种方法是在.csproj文件中显式添加androidmanifest.xml,如下所示:

<PropertyGroup>
  <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
</PropertyGroup>

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

于 2012-05-14T07:07:31.967 回答
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

[程序集:UsesPermission("intentsayhello.permission.SAYHELLO")]

[程序集:UsesPermission(Android.Manifest.Permission.Internet)]

从那时起它就起作用了。

于 2012-05-09T03:49:26.520 回答