我有一个运行 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
我的猜测是,这是因为从意图启动应用程序的活动不能是主要活动,而是必须是一个单独的活动,但我无法在网上找到任何证明这一点的东西。
我的问题是——你知道这是真的吗——我不应该在应用程序的主要(可启动)活动上设置自定义签名级别权限吗?