Разрешение на IntentService с Eclair 2.1 - PullRequest
0 голосов
/ 30 августа 2011

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

Они отлично работают на Froyo 2.2 или выше, но не на Eclair 2.1.

Первое приложение (вызывающая сторона) имеет в манифесте <uses-permission ... />, а второе (которое называется) определяет новое разрешение с помощью <permission .... />.

У кого-то есть такая же проблема с Eclair 2.1?

Я использую для тестирования только на эмуляторе 2.1 (2.1-update1 и 2.1update1 с google api).

Это ошибка из logcat:

W/ActivityManager(   52): Permission Denial: Accessing service ComponentInfo{xy.android.myapp.pkg2/xy.android.myapp.pkg2.Service} from pid=52, uid=1000 requires xy.android.myapp.ACCESS_SERVICE
W/System.err(  499): java.lang.SecurityException: Not allowed to start service Intent { act=xy.android.myapp.pkg2.REMOTE_LIST cmp=xy.android.myapp.pkg2/.Service (has extras) } without permission xy.android.myapp.ACCESS_SERVICE
W/System.err(  499): at android.app.ApplicationContext.startService(ApplicationContext.java:765)
W/System.err(  499): at android.content.ContextWrapper.startService(ContextWrapper.java:326)
W/System.err(  499): at xy.android.myapp.pkg1.MainActivity$6.run(MainActivity.java:711)
W/System.err(  499): at java.lang.Thread.run(Thread.java:1096)

Когда я устанавливаю apk, в отличие от Froyo, журнал о новом разрешении не регистрируется.

Манифест приложений:

Pkg1 (звонящий)

<uses-permission android:name="xy.android.myapp.ACCESS_SERVICE" />

PKG2

<permission android:name="xy.android.myapp.ACCESS_SERVICE"
            android:label="@string/label"
            android:description="@string/desc"
            android:protectionLevel="signature" />

А в определении сервиса:

<service ... android:permission="xy.android.myapp.ACCESS_SERVICE" ... />

Я тестировал со значением protectionLevel: нормальное, сигнатура и опасное. Спасибо.

1 Ответ

0 голосов
/ 29 февраля 2012

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

...