0

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= signignを使用していることに注意してください。これは、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

モノアンドロイドフォーラムでさらに検索すると、これを行う別の方法は、以下のように.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 に答える