SecurityException: не разрешается запускать службу Intent без разрешения
У меня есть библиотека с именем 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 и на nexus 4 под 4.2.2, но когда я пытаюсь использовать его на HTC Wildfire S с 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 );
Я искал в Интернете информацию о помощи и прочитал каждый связанный с этим вопрос переполнения стека, который только смог найти, но просто не могу найти ничего, что мне не хватает.
1 ответ
Итак, после того, как он работал на эмуляторе 2.2 и 2.3, я попытался сбросить заводские настройки Wildfire S.
Я думаю, что это похоже на эту проблему: намеренное пользовательское разрешение не работает - если бы я переименовал пакет своего приложения, он, вероятно, тоже работал бы.