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