Android OrderedBroadcast No funciona en la versión de lanzamiento

¿Por qué un OrderedBroadcast funcionará en la compilación de depuración de la aplicación pero no en la versión? Estoy enviando el siguiente OrderedBroadcast:

context.sendOrderedBroadcast(sendInt, "xxx.xxxx.permission.API", new BroadcastReceiver() { @SuppressLint("NewApi") @Override public void onReceive(Context receivercontext, Intent intent) { Bundle results = getResultExtras(true); if (results.getInt("Result", Activity.RESULT_CANCELED) == Activity.RESULT_OK) { Log.d("DEBUG", "OK"); } else { Log.e("DEBUG", "Failed"); } } }, null, Activity.RESULT_OK, null, null); 

Ambas aplicaciones tienen el permiso adecuado en el archivo AndroidManifest.xml y el receptor se declara de la siguiente manera:

 <receiver android:name="xxx.xxxx.xxxx.Receiver1" android:enabled="true" android:exported="true" android:permission="xxx.xxxx.permission.API"> <intent-filter> <action android:name="xxx.xxxx.permission.API.1" /> </intent-filter> </receiver> 

Como ya he mencionado si tengo tanto el remitente y receptor de aplicaciones que se ejecutan en compilaciones de depuración, entonces todo funciona perfectamente sin embargo, si ejecuto la aplicación receptor en el modo de liberación (no proguard o nada) la aplicación remitente sólo obtiene el resultado RESULT_CANCELLED ?

Esto me ha fastidiado durante días por lo que cualquier idea sería muy apreciada.

Ok así que después de mucho buscar y ensayos resulta que es una característica de seguridad relativamente simple pero molesta de Android causando este error:

Una aplicación que se instala sólo puede recibir y actuar en una emisión (normal o ordenada de difusión) si se abre por primera vez en el dispositivo. En mi caso, la compilación de depuración se abrió automáticamente cuando se ejecuta, pero la versión de compilación no era y no tenía icono de la aplicación que actuaba únicamente como una extensión de la aplicación principal, por lo tanto, nunca se abrió.

Por lo tanto, la solución era tener un icono de aplicación para la aplicación receptora y asegurarse de que se ejecuta en el dispositivo. La parte rara de esto es que no se generan errores de seguridad en logcat, a menos que sepas acerca de este tipo de cosas es muy difícil de depurar!

Suena como cuando usted declara el permiso, usted está utilizando android:protectionLevel="signature" . Si está ejecutando el remitente en depuración, se firma con su clave de depuración. El receptor se firmará con la tecla de liberación. Por lo tanto, las firmas no coinciden y el receptor no se le otorgará el permiso.

Debe ejecutar ambos en modo de liberación para que ambos estén firmados con la misma clave.

  • Receptor de difusión para inserción en contactos
  • BroadcastReceiver Vs WakefulBroadcastReceiver
  • No se puede encontrar el receptor definido Definido ~ 1% del tiempo
  • ¿Cómo implementar múltiples notificaciones push de GCM en una sola aplicación?
  • Android - Receptor de emisión de estado de red no recibe intención
  • Restricción de Android Broadcast Receiver de una aplicación específica
  • Android Broadcast Receiver para enviar mensajes SMS?
  • Android detecta AudioRecord / maneras de grabar audio sin bloquear otras aplicaciones
  • GCM BroadcastReceiver setResultCode uso
  • ¿Cómo enviar sms al apagar el teléfono en android?
  • El servicio no se inició en BOOT COMPLETE
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.