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