2

我有一个名为 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的 HTC Wildfire S 上使用它时,它在尝试启动服务的那一刻就崩溃了,除了以下例外:

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 问题,但找不到任何我想念的东西。

4

1 回答 1

0

因此,在它在 2.2 和 2.3 模拟器上运行后,我尝试将 Wildfire S 恢复出厂设置。现在它工作正常。

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

于 2013-06-28T16:26:33.627 回答