6

Perché un OrderedBroadcast funziona nella build di debug dell'app ma non nel rilascio? Io mando il seguente OrderedBroadcast:Android OrderedBroadcast non funziona in Release Build

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); 

Entrambe le applicazioni hanno l'autorizzazione appropriata nel file AndroidManifest.xml e il ricevitore è dichiarato come segue:

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

Come ho già detto, se ho sia il mittente e le app del ricevitore che girano in build di debug allora tutto funziona perfettamente tuttavia se eseguo l'app ricevente in modalità di rilascio (senza proguard o altro) l'app del mittente ottiene solo il risultato RESULT_CANCELLED?

Questo mi ha infastidito per giorni quindi qualsiasi idea sarebbe molto apprezzata.

+0

problemi di autorizzazione? aggiungi il permesso in "", lo hai appena trovato [qui] (http://developer.android.com/intl/es/reference/android/content/BroadcastReceiver.html#Security) – calvinfly

+0

stai facendo affidamento su il valore risultante? ha fatto il ricevimento del trigger del ricevitore? o eseguire? – Elltz

+0

Il permesso è stato utilizzato e io li ho ricontrollati, mi sto affidando alla ricezione della risposta OK dalla seconda app che il ricevitore non innesca o esegue a meno che non avvii l'app ricevente in modalità di debug? – Apqu

risposta

1

Ok, quindi dopo molte ricerche e le prove si scopre che è una caratteristica di sicurezza ancora fastidioso relativamente semplice di Android che causa questo errore:

Un'applicazione che viene installato può solo ricevere e agire su di una trasmissione (normale o trasmissione ordinata) se è stato aperto per la prima volta sul dispositivo. Nel mio caso la build di debug è stata automaticamente aperta quando è stata eseguita, ma la build di rilascio non lo era e non aveva nessuna icona di app che agiva esclusivamente come un'estensione dell'app principale, quindi non è mai stata aperta.

La soluzione era quindi avere un'icona di app per l'app di ricezione e assicurarsi che venga eseguita sul dispositivo. La parte strana di questo è che non vengono generati errori di sicurezza in logcat, quindi a meno che non si sappia di questo genere di cose è molto difficile eseguire il debug!

0

Sembra che quando si dichiara il permesso, si sta utilizzando android:protectionLevel="signature". Se stai eseguendo il mittente in debug, è firmato con la tua chiave di debug. Il ricevitore sarà firmato con la chiave di rilascio. Pertanto, le firme non corrisponderanno e al destinatario non verrà concessa l'autorizzazione.

È necessario eseguire entrambi in modalità di rilascio in modo che entrambi siano firmati con la stessa chiave.

+0

Molte grazie per la tua risposta Tornerò al mio computer la mattina, quindi controllerò per vedere se questo è il problema, in tal caso segnerò come risposta e assegnerò la taglia, grazie ancora – Apqu