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.

 <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.

2 Solutions collect form web for “Problema con android: protectionLevel = "firma"”

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.

  • ¿Por qué utilizar servicios vinculados (no iniciados) dentro del proceso de solicitud?
  • PeekService () devuelve null aunque el servicio se está ejecutando, si el servicio es reiniciado por el sistema después de matar OOM
  • Puede AlarmManager (alarm.setRepeating) trabajo en caso de reinicio del teléfono - Android
  • Android onServiceConnected () se llama en un hilo separado?
  • Cómo depurar dos procesos en Android?
  • ¿Pueden los servicios iniciados y enlazados vivir "para siempre"?
  • ¿Se puede pasar un paquete a un servicio?
  • ¿Cómo comprobar si un servicio se está ejecutando en Android?
  • Obtener el color de píxel en segundo plano en Android
  • AVD no se está ejecutando
  • Creación de un servicio en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.