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.

Я думаю, что это похоже на эту проблему: намеренное пользовательское разрешение не работает - если бы я переименовал пакет своего приложения, он, вероятно, тоже работал бы.

Другие вопросы по тегам