2012-11-14 15 views
5

Być może podążam w tym kierunku w niewłaściwy sposób, ale chcę odpowiedzieć na zdarzenie kliknięcia mojej aplikacji Android AppWidget w mojej własnej aplikacji ORAZ uruchomić działanie. W tym czasie ustawiłem PendingIntent Mam inny Intent, który chcę uruchomić po kliknięciu. My onStartCommand korzysta z tej linii:Wysyłanie Intent wewnątrz innej intencji

final Intent mLaunchIntent = (Intent) intent.getParcelableExtra(Widget.EXTRA_INTENT); 

Kiedy zadzwonić setOnClickPendingIntent mam ten wiersz uprzedniej:

mSendingIntent.putExtra(Widget.EXTRA_INTENT, (Parcelable) mLaunchIntent); 

więc mimo mLaunchIntent jest poprawnym Intent w obu liniach, pierwsza linia brakuje dużo danych. Wywołanie startActivity następnie nie powiedzie się, ponieważ Intent jest nieprawidłowe.

Zastanawiam się, czy jest to możliwe, i jak wysłać Intent wewnątrz innego Intent bez ściśle nazywając putExtras ponieważ ta metoda prosta dodaje dodatki z jednego Intent do następnego. Chciałbym zachować te dwa oddzielne i łatwo dostępne.

Odpowiedz

1

Nie możesz użyć funkcji service do przeanalizowania zamiaru?

+0

Używam usługi, ale ta usługa jest wywoływana z intencją, w tym przypadku "mSendingIntent". Muszę przekazać 'mLaunchIntent' obok tej intencji, aby zdarzenie click aktywowało działanie. – Tom

1

Istnieją różne sposoby przekazywania celów/obiektów od źródła do miejsca przeznaczenia i odwrotnie. Jednym ze sposobów robienia tego bez korzystania z pakietów lub dodatków byłoby odwoływanie się do zwykłych metod klasy ze zmiennymi (pobierającymi i ustawiającymi). Przekaż obiekty za pomocą metod. Innym sposobem na to byłoby użycie zmiennych klasowych. Przykład:

public class ClassB extends Activity{ 
    public static Object myObject; 
    ... 
} 

public class ClassA extends Activity{ 
    ... 
    @override 
    protected void onCreate(Bundle savedInstanceState){ 
     Object myObject = ClassB.myObject; 
    } 
} 
+0

To ... jedno rozwiązanie. Ale to się nie udaje w moim przypadku z powodu wielu problemów. Po pierwsze, co jeśli użytkownik kliknął dwa widżety w kolejności. Nie chcę modyfikować zmiennej globalnej lub trzeba skonfigurować jakiejś globalnej kolejki. Ponadto usługi i BroadcastReceiver działają na różnych wątkach. Warunki wyścigowe sprawiają, że jest to bardzo trudne rozwiązanie. – Tom

7

Tak naprawdę to rozgryzłem, rozwiązanie było dość proste. mLaunchIntent nie należy przesyłać do Parcelable lub dane zostaną utracone.

mSendingIntent.putExtra(Intent.EXTRA_INTENT, mLaunchIntent); 

To było wszystko, co potrzebne do wysłania za pośrednictwem innego IntentIntent.

+0

czy to faktycznie działa? przetestowałeś to? –

+0

Należy "Intent.EXTRA_INTENT" zamiast "Widget.EXTRA_INTENT' – GreenRobo

+0

możesz powiedzieć, jak odzyskać intencję i przekazać do obiektu intencji – JSONParser

Powiązane problemy