SecurityException:未经许可不允许启动服务Intent

时间:2013-06-05 11:55:43

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

我有一个名为com.example.library的库,其中包含一个名为com.example.library.http.RestService的服务。图书馆的清单包含以下元素:

<uses-permission android:name="com.example.library.permission.REST_PERMISSION" />

<permission
    android:name="com.example.library.permission.REST_PERMISSION"
    android:protectionLevel="signature" />

<application ...>
    <service
        android:name="com.example.library.http.RestService"
        android:enabled="true"
        android:permission="com.example.library.permission.REST_PERMISSION" 
        android:exported="true" >
        <intent-filter>
            <action android:name="com.example.library.LAUNCH_REST_SERVICE" />
        </intent-filter>
    </service>
</application>

我在名为com.example.testapp的应用中使用该库。 TestApp的清单重复与上面的库完全相同的元素。这在运行 4.0.3 的模拟器和运行 4.2.2 的nexus 4上运行良好,但是当我尝试在运行 2.3.5 ,它在尝试启动服务时失败,但有以下例外:

java.lang.SecurityException: Not allowed to start service Intent 
{ act=com.example.library.LAUNCH_REST_SERVICE pkg=com.example.testapp (has extras) }
without permission com.example.library.permission.REST_PERMISSION

我正在使用以下代码启动该服务:

Intent intent = new Intent();
intent.setAction( "com.example.library.LAUNCH_REST_SERVICE" );
intent.setPackage( "com.example.testapp" );

[setting some extras]

startService( intent );

我一直在网上寻求帮助,并且已经阅读了我能找到的每一个相关的Stack Overflow问题,但是找不到任何我遗漏的东西。

1 个答案:

答案 0 :(得分:0)

因此,在2.2和2.3仿真器上工作之后,我尝试重置Wildfire S的工厂。现在它工作正常。

我认为这类似于这个问题:Intent custom permission not working - 如果我重命名我的应用程序包,它可能也会工作。