Android:对主要活动设置自定义权限 - 不好的做法?

时间:2013-10-01 21:56:49

标签: android android-intent android-activity android-manifest android-permissions

我有一个运行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

我的猜测是,这是因为从意图启动应用程序的活动不能是主要活动,而是必须是一个单独的活动,但我找不到任何证明在线的活动。

我的问题是 - 你知道这是真的吗?我是否永远不会对应用程序的主(可启动)活动提出自定义签名级别权​​限?

1 个答案:

答案 0 :(得分:3)

  

我是否应该永远不会对应用程序的主(可启动)活动设置自定义签名级别权​​限?

是的,除非您是主屏幕或其他启动器的作者,并且可以确保它拥有自定义权限。否则,你也可以取消MAIN / LAUNCHER <intent-filter>,因为它正在宣传一些通常不属实的东西(“嘿,启动我!”)。