2013-06-05 15 views
6

wiem, że mogę zrobić wewnętrzną klasę odbiornika, aby zadzwonić do dowolnej metody z mojego odbiornikawywołać metodę działalność z klasy BroadcastReceiver

Ale moim głównym zajęciem jest cholernie duża i robi wiele rzeczy. Potrzebuję więc klasy, która rozszerza odbiornik, ale kto nie jest klasą wewnętrzną. I może wywołać jedną metodę z mojej głównej działalności. Nie wiem, czy to możliwe, ale moja aktywność to działalność związana z domem i "jednorazowa aktywność", więc może z tym szczegółem ktoś ma sposób na dostęp do mojej aktywności.

Jeśli nie da się podzielić kodu Java w wielu plikach, mój główny ma ponad 600 linii. (Oraz informacje już 19 plików Java dla wersji alfa moich aplikacji, więc nie spróbować go podzielić)

+0

nie można przekazać kontekst działalności do BrodcastRecevier i użyć go, aby rozpocząć działalność? – Blackbelt

+0

Aktywność jest zawsze uruchamiana Nie chcę uruchamiać jej z odbiornika, wystarczy wywołać metodę – Jebik

Odpowiedz

18

Tworzenie BroadcastReceiver dynamicznie:

W swojej klasie BroadcastReceiver zdefiniować element Klasa:

YourMainActivity yourMain = null; 

i metoda:

setMainActivityHandler(YourMainActivity main){ 
yourMain = main; 
} 

z główną działalność zrobić:

private YourBroadcastReceiverClassName yourBR = null; 
yourBR = new YourBroadcastReceiverClassName(); 
    yourBR.setMainActivityHandler(this);  
    IntentFilter callInterceptorIntentFilter = new   IntentFilter("android.intent.action.ANY_ACTION"); 
    registerReceiver(yourBR, callInterceptorIntentFilter); 

wreszcie, gdy yourBR.onReceive jest zwolniony można nazwać:

yourMain.methodOfMainActivity(); 
+0

Czy muszę zdefiniować moją akcję w Manifest przy użyciu tej metody lub filtr intencyjny wystarczy, aby uzyskać transmisję? – Jebik

+0

Intent filter is enough – blganesh101

+1

OK dzięki, spróbuj tego. po prostu zmień swój post-change callInterceptor przez yourBR in registerReceiver call, jeśli inny odczytuje to: P – Jebik

Powiązane problemy