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
これは、インテントからアプリケーションを起動するアクティビティをメインのアクティビティにすることはできず、別のアクティビティにする必要があるためだと思いますが、それをオンラインで証明するものは見つかりませんでした。
私の質問は - これが本当だと知っていますか - アプリケーションのメインの (起動可能な) アクティビティにカスタム署名レベルのアクセス許可を設定してはいけませんか?