Problema con android: protectionLevel = "firma"
Estoy tratando de impedir que las aplicaciones se vinculen a un servicio si no están firmadas con el mismo certificado que la aplicación que lo contiene. Para ello he declarado un nuevo permiso en el manifiesto (de la aplicación que contiene el Servicio) mediante el uso de un elemento y establecer el nivel de protección del nuevo permiso a Firma como se muestra.
<permission android:name="jp.co.abc.android.OMRSSettings.permission.Access" android:protectionLevel="signature"></permission> <uses-permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"/>
Luego, en la declaración de manifiesto para el Servicio, utilizo un atributo android: permission para que este nuevo permiso sea obligatorio para enlazar con el Servicio.
- OnStart () y onStartCommand () siguen llamados en 2.0 y superiores
- Descargar varios archivos con una barra de progreso en ListView Android
- Android PendingIntent Extra
- Android Service está creando una y otra vez
- ¿Es correcto llamar a Service.startService () desde Service.onBind ()?
<service android:name="jp.co.xyz.bluetooth.profile.TIPServer" android:permission="jp.co.abc.android.OMRSSettings.permission.Access" > <intent-filter> <action android:name="jp.co.xyz.bluetooth.api.ICommonResultCallback" /> <action android:name="jp.co.xyz.bluetooth.api.ITimeServer" /> </intent-filter>
Intento acceder a este servicio desde otra aplicación. En el manifiesto de esta segunda aplicación, agrego el <uses-permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"/>
y tratar de enlazar con el servicio de la primera aplicación.
Pero recibo la siguiente excepción.
01-02 00:06:54.531: INFO/PowerManagerService(425): Start Light.setBrightness(), [20], [3] 01-02 00:06:56.473: INFO/PowerManagerService(425): Start Light.setBrightness(), [130], [3] 01-02 00:06:58.055: WARN/dalvikvm(4956): threadid=1: thread exiting with uncaught exception (group=0x40b70390) 01-02 00:06:58.055: WARN/ActivityManager(425): Permission Denial: Accessing service ComponentInfo{jp.co.abc.android.omrsettings/jp.co.xyz.bluetooth.profile.TIPServer} from pid=4956, uid=10158 requires jp.co.abc.android.OMRSSettings.permission.Access 01-02 00:06:58.065: ERROR/AndroidRuntime(4956): FATAL EXCEPTION: main java.lang.SecurityException: Not allowed to bind to service Intent { act=jp.co.xyz.bluetooth.api.ITimeServer } at android.app.ContextImpl.bindService(ContextImpl.java:1187) at android.content.ContextWrapper.bindService(ContextWrapper.java:370) at jp.co.abc.middleware.tip.LeTimeServerProfile.startTimeServer(LeTimeServerProfile.java:45) at jp.co.abc.tip.TimeActivity.onClick(TimeActivity.java:49) at android.view.View.performClick(View.java:3511) at android.view.View$PerformClick.run(View.java:14133) at android.os.Handler.handleCallback(Handler.java:605) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4507) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) at dalvik.system.NativeStart.main(Native Method) 01-02 00:06:58.095: WARN/ActivityManager(425): Force finishing activity jp.co.abc.tip/.TimeActivity
¿Puede alguien por favor, hágamelo saber por qué tengo problemas de permiso aunque declaro correctamente <uses-permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"/>
en el manifiesto de mi segunda aplicación.
Cualquier ayuda es muy apreciada.
EDITAR
Modificado para incluir la corrección lenik sugerida en su respuesta.
- ¿Cómo comprobar si un servicio se está ejecutando en Android?
- ¿Cómo detener / cancelar el administrador de alarmas en otra actividad?
- Obtención de I / art: Explicit concurrent mark sweep GC liberado
- Android servicio notificar actividad completó la mejor manera?
- ¿Necesito un servicio en mi aplicación Android?
- ¿Cómo funcionan las aplicaciones de Android, como Facebook, WhatsApp, en primer plano sin notificación?
- Android - Servicio de fondo de juego de Tamagotchi
- Reemplazo de Android O para getRunningServices
Además de la solución de lenik de no estropear sus nombres de permisos, con su implementación actual, la orden de instalación importa. Primero debe instalar el servicio (donde se define el <permission>
), antes de instalar el cliente. De lo contrario, el cliente no recibirá el permiso, ya que Android ignorará un <uses-permission>
para un permiso que no reconozca. Si coloca el elemento <permission>
en ambas aplicaciones (con los mismos valores), el orden de instalación ya no importará.
Su permiso solicitado es:
<permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"
Y su registro dice:
requires jp.co.abc.android.OMRSettings.permission.Access
Usted debe decidir usar "OMRS" o "OMR" en ambos casos, una "S" es adicional.
- Necesita hacer la vista de lista en el centro verticalmente para Disposición de cajones en Android
- Mensaje de error: el archivo adjunto de origen no contiene el origen del archivo ListView.class