1

WebView を実行する単純なアプリケーションがあり、URL 文字列に含めるいくつかのパラメーターを送信する他のアプリケーションから起動できるようにしたいと考えています。

これを達成するために、メイン アクティビティに新しいインテント フィルターを作成して、メイン/ランチャーのインテント フィルターを次のように使用します。

        <intent-filter>
            <action android:name="com.mycompany.myapp.intents.START_APP" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

ここまでは順調ですが、ひねりがあります。このアクティビティが誰にも実行されないように保護したい - カスタム許可を定義する同じ署名を持つ他のアプリケーションによってのみ実行されるようにしたい. そのために、次のようにアプリケーションのカスタム許可を作成しました。

<permission
    android:name="com.mycompany.myapp.mycustompermission"
    android:protectionLevel="signature" />

そして私が追加した活動で:

            android:permission="com.mycompany.myapp.mycustompermission"

これにより、APK からのインストール時およびインストーラーからの起動時に、次のエラーが発生しました。

E/AndroidRuntime(6702): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.mycompany.myapp cmp=com.mycompany.myapp/.myActivity } from ProcessRecord{41517d20 6702:com.android.packageinstaller/u0a56} (pid=6702, uid=10056) requires com.mycompany.myapp.mycustompermission

そして、画面には次のようなメッセージが表示されます。

Unfortunately, Package installer has stopped

これは、インテントからアプリケーションを起動するアクティビティをメインのアクティビティにすることはできず、別のアクティビティにする必要があるためだと思いますが、それをオンラインで証明するものは見つかりませんでした。

私の質問は - これが本当だと知っていますか - アプリケーションのメインの (起動可能な) アクティビティにカスタム署名レベルのアクセス許可を設定してはいけませんか?

4

1 に答える 1

3

アプリケーションのメイン (起動可能な) アクティビティにカスタム署名レベルのアクセス許可を設定しないでください。

はい、あなたがホーム画面または他のランチャーの作成者であり、それがカスタム許可を保持していることを確認できる場合を除きます。MAINそれ以外の場合は、 /を外した方がよいでしょうLAUNCHER <intent-filter>。これは、一般的に真実ではない何か (「ねえ、私を起動してください!」) を宣伝しているためです。

于 2013-10-01T22:03:36.553 に答える