我有一个运行Webview的简单应用程序,并且希望其他应用程序可以将其发送给我,这些参数将包含在URL字符串中以启动它。
为此,我在main活动上创建了一个新的intent-filter,与main / launcher intent-filter一起使用,如下所示:
<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
我的猜测是,这是因为从意图启动应用程序的活动不是主要活动,而必须是单独的活动,但是我找不到任何能证明这一点的在线活动。
我的问题是-您是否知道这是对的-我不应该对应用程序的主要(可启动)活动设置自定义签名级别权限吗?
最佳答案
我应该永远不要在应用程序的主要(可启动)活动上添加自定义签名级别权限吗?
是的,除非您是主屏幕或其他启动器的作者,并且可以确保它拥有自定义权限。否则,您也可以取消MAIN
/ LAUNCHER
<intent-filter>
,因为它宣传的东西(“嘿,开我!”)通常是不正确的。