6

Dlaczego funkcja OrderedBroadcast działa w wersji debugowania aplikacji, ale nie w wersji? Przesyłam następujące OrderedBroadcast:Android OrderedBroadcast nie działa przy tworzeniu wersji

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

Obie aplikacje mają odpowiednie uprawnienia do pliku AndroidManifest.xml a odbiornik jest zadeklarowana następująco:

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

Jak już wspomniałem, jeśli mam zarówno nadawcy i aplikacje odbiornika działające w wersjach debugowych, a następnie wszystko działa idealnie, ale jeśli uruchomię aplikację odbiornika w trybie zwolnienia (bez proguarda lub czegokolwiek innego), aplikacja nadawcy po prostu uzyska wynik RESULT_CANCELLED?

To drażniło mnie od wielu dni, więc wszelkie pomysły będą mile widziane.

+0

problemy z uprawnieniami? dodaj uprawnienia w '', po prostu znalazłeś je [tutaj] (http://developer.android.com/intl/es/reference/android/content/BroadcastReceiver.html#Security) – calvinfly

+0

czy polegasz na wynikowa wartość? czy uruchomił się onReceive od odbiornika? lub wykonać? – Elltz

+0

Pozwolenie zostało użyte i ponownie je sprawdziłem, polegam na otrzymywaniu odpowiedzi OK z drugiej aplikacji, której odbiornik nie uruchamia ani nie wykonuje, chyba że uruchomię aplikację odbiornika w trybie debugowania? – Apqu

Odpowiedz

1

Ok, więc po wielu poszukiwaniach i badaniach okazuje się, że jest to stosunkowo prosty, ale denerwujące zabezpieczenie Androida powoduje ten błąd:

Aplikacja jest zainstalowana może tylko odbierać i ustawa o transmisji (czy to normalne czy uporządkowaną transmisję), jeśli jest po raz pierwszy otwarta na urządzeniu. W moim przypadku kompilacja debugowania została automatycznie otwarta po uruchomieniu, ale wersja wydania nie była i nie miała ikony aplikacji działającej wyłącznie jako rozszerzenie głównej aplikacji, dlatego nigdy nie została otwarta.

Poprawiono zatem również ikonę aplikacji dla aplikacji odbierającej i upewnić się, że jest ona uruchomiona na urządzeniu. Dziwne jest to, że w logcat nie są generowane żadne błędy bezpieczeństwa, więc jeśli nie wiesz o takich rzeczach, bardzo trudno jest debugować!

0

Wygląda na to, że po zadeklarowaniu zgody używasz android:protectionLevel="signature". Jeśli używasz nadawcy w debugowaniu, jest on podpisany za pomocą klucza debugowania. Odbiornik zostanie podpisany za pomocą klucza zwolnienia. Tak więc podpisy nie będą się zgadzać, a odbiorca nie otrzyma pozwolenia.

Należy uruchomić oba w trybie zwolnienia, aby oba były podpisane tym samym kluczem.

+0

Bardzo dziękuję za odpowiedź Wrócę do komputera rano, więc sprawdzę, czy to jest problem, jeśli tak, to zaznaczę jako odpowiedź i nagrodzę nagrodę, jeszcze raz dziękuję – Apqu