Я пишу два приложения на 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: нормальное, сигнатура и опасное. Спасибо.