13

To pytanie zostało zadane kilka razy w przepełnieniu stosu, ale nie ma rozwiązania. Mam odbiornik transmisji do odbierania działania podłączonego przez USB. Odpowiedzialność odbiornika jest, jeśli mam zamiar uruchomić moją aplikację. W pliku manifestu dodałem odbiornik. Mam tę samą logikę działającą w GingerBread, ale I ICS nie działa. Wiele pytań podobne, broadcast-not-invokingOdbiornik Broadcast nie działa w ICS, jeśli aplikacja nie została uruchomiona co najmniej raz.

1: Android Boot-Up BroadCast Not invoking i broadcastreciever-not-working

Jeśli zacznę moją aplikację ręcznie raz, potem od następnego razu na oddziałach po podłączeniu USB Moja aplikacja uruchamia się automatycznie. próbuje odpowiedzieć na to samo pytanie, ale bez odpowiedzi. Czy istnieje rozwiązanie tego w ICS?

To mój odbiornik

 <receiver android:name="com.test.MyReceiver"> 
       <intent-filter> 
        <action android:name="android.hardware.usb.action.USB_STATE" /> 
        <action android:name="android.net.wifi.STATE_CHANGE" /> 
      <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
       </intent-filter> 
      </receiver> 
    and this is my class 
    public class MyReceiver extends BroadcastReceiver { 
    . 
    . 
    . 

    public void onReceive(Context context, Intent intent) { 
. 

mylę w dowolnym miejscu?

góry dzięki --Kozlov

+0

Nie mam dla ciebie odpowiedzi, chociaż może mi pomóc, gdybym mógł spojrzeć na twój kod i sprawdzić, czy jest coś oczywistego. Mam jednak aplikację, która działa dobrze, nawet z detektorem rozruchowym w ICS, więc nie mogę powiedzieć na pewno, jaki może być twój problem. – waxspin

+0

Cześć woskowanie, dziękuję za komentarz. Zrób pytanie z manifestem i odbiorcą. Czy możesz sprawdzić, czy coś się nie dzieje? Mam również niezbędne pozwolenie. – Kozlov

+0

Myślę, że źle zrozumiałem problem jako taki, w którym nikt jeszcze nie uruchomił aplikacji. Będę musiał odłożyć się do ** CommonsWare ** poniżej, ponieważ wygląda na to, że przetestował to uczciwie. W moim przypadku moja aplikacja działa, ponieważ musi być otwarta przynajmniej raz, aby była użyteczna dla użytkownika końcowego. Domyślam się, że jedyną rzeczą, którą możesz tu zrobić, jest dostosowanie wygody użytkownika, aby nie stanowiło to problemu. Po prostu nie zauważyłem tego z moją aplikacją, ponieważ moja szczególna sprawa nie musiała być ponownie dostosowywana po zmianie. – waxspin

Odpowiedz

11

Czy istnieje rozwiązanie tego problemu w ICS?

Działa poprawnie. Począwszy od wersji Androida 3.1, żadna wersja BroadcastReceiver nie będzie działać, dopóki użytkownik nie uruchomi ręcznie aktywności. I blogged about this eight months ago.

+0

Po prostu ciekawy, dlaczego mieliby wyłączyć to dla Broadcast Recievers, ale nie dostawców treści? Testowałem ten sam scenariusz zarówno w wersji 2.3, jak i ICS. ContentProvider będzie działał, BR nie będzie w ICS, ale obie działają pod 2.3. – Ben

+1

@Ben: ponieważ dostawcy treści nie są spontanicznie wykorzystywani. Zostało to dodane w celu zmniejszenia liczby złośliwych programów typu drive-by, elementów, które instalują, przechwytuje pakiety audycji systemowych i robi wszystko bez udziału użytkownika. – CommonsWare

+0

Tak, wydaje mi się, że widzę ten argument, ale wydaje mi się, że mogliby to uczynić, a nie całkowicie zmienić sposób działania systemu. Jedną z rzeczy, które lubiłem w Broadcast Receivers, było to, że były to szyny komunikatów wbudowane w system operacyjny z gwarantowaną dostawą (jeśli używasz sendOrderedBroadcast). Wydaje się, że teraz, gwarancja nie ma, więc jestem zmuszony do korzystania z CP zamiast, co jest w porządku, z tym wyjątkiem, że tracę ten piękny pub/sub model z filtrami intent. – Ben