6

Warum würde ein OrderedBroadcast im Debug-Build der App funktionieren, aber nicht in der Version? Ich schicke die folgende OrderedBroadcast:Android OrderedBroadcast funktioniert nicht im 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); 

Beide Anwendungen die entsprechende Berechtigung in der AndroidManifest.xml-Datei und der Empfänger erklärt sich wie folgt:

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

Wie ich bereits erwähnt, wenn ich sowohl den Absender und Empfänger-Apps, die in Debug-Builds laufen, dann funktioniert alles einwandfrei. Wenn ich die Receiver-App im Release-Modus starte (kein Proguard oder irgendetwas), bekommt die Sender-App nur das Ergebnis RESULT_CANCELLED?

Das hat mich seit Tagen abgehört, also würden alle Ideen sehr geschätzt werden.

+0

Berechtigungsprobleme? Fügen Sie die Berechtigung in '' hinzu und finden Sie sie [hier] (http://developer.android.com/intl/es/reference/android/content/BroadcastReceiver.html#Security) – calvinfly

+0

vertrauen Sie der resultierende Wert? Hat der OnReceive des Recievers ausgelöst? oder ausführen? – Elltz

+0

Die Berechtigung wurde verwendet und ich habe diese erneut überprüft. Ich verlasse mich darauf, die OK-Antwort von der zweiten App zu erhalten, die der Empfänger nicht auslöst oder ausführt, wenn ich die Empfänger-App nicht im Debug-Modus ausführe. – Apqu

Antwort

1

Ok so nach langem Suchen und Versuchen es stellt sich heraus, es ist eine relativ einfache, aber ärgerliche Sicherheitsfunktion von Android verursacht diesen Fehler:

Eine App, die nur auf eine Übertragung empfangen und handeln kann installiert ist (entweder normal oder Sendeauftrag), wenn es zuerst auf dem Gerät geöffnet wird. In meinem Fall wurde der Debug-Build automatisch geöffnet, wenn er ausgeführt wurde, aber der Release-Build war nicht und es hatte kein App-Icon, das lediglich als Erweiterung der Haupt-App fungierte und somit nie geöffnet wurde.

Die Lösung bestand daher darin, ein App-Symbol für die empfangende App zu haben und sicherzustellen, dass es auf dem Gerät ausgeführt wird. Der seltsame Teil davon ist, dass in logcat keine Sicherheitsfehler generiert werden. Wenn Sie also nicht über solche Dinge Bescheid wissen, ist es sehr schwer zu debuggen!

0

Es klingt wie, wenn Sie die Erlaubnis erklären, verwenden Sie android:protectionLevel="signature". Wenn Sie den Absender im Debug ausführen, wird er mit Ihrem Debug-Schlüssel signiert. Der Empfänger wird mit dem Freigabeschlüssel signiert. Somit stimmen die Signaturen nicht überein und dem Empfänger wird die Erlaubnis nicht erteilt.

Sie müssen beide im Freigabemodus ausführen, damit beide mit demselben Schlüssel signiert sind.

+0

Sehr vielen Dank für deine Antwort Ich werde am Morgen wieder an meinem Computer sein, also werde ich nachsehen, ob das das Problem ist, wenn ja dann werde ich als Antwort markieren und die Prämie auszahlen, nochmals danke – Apqu

Verwandte Themen