2010-10-22 11 views
13

Tak więc, jestem nowy w Javie i do tworzenia aplikacji na Androida, ale nie jest to nowość w programowaniu. Przeczytałem większość strony developer.android.com, ale nie udało mi się tego znaleźć:Zapobiegaj zduplikowanym działaniom

Chcę się upewnić, że pewne działanie nie działa więcej niż jeden raz w tym samym czasie . Mamy więc zadanie nieco jak poniżej:
aktywny A) TabActivity, który uruchamia
aktywny b) ListView, że na kliknięcie, otwiera
Activity C), który jest interfejsem dla obiektu MEDIAPLAYER

W tej chwili, gdy ktoś naciśnie przycisk Wstecz podczas pobytu w C (Co jest prawdopodobne, ponieważ będą słuchać strumieniowego 1-godzinnego pliku mp3), a następnie naciśnie inny element listy zamiast powrotu do C, C jest otwierany po raz drugi i odtwarzane są dwa strumienie. Oczywiście, chciałbym, aby tylko jedna instancja C działała, i chcę drugie kliknięcie elementu listy, aby przywrócić C z powrotem na przód. Może to być również przydatne dla celów powiadamiania.

Robiłem zamieszanie z flagami (zwłaszcza FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_CLEAR_TOP i FLAG_ACTIVITY_REORDER_TO_FRONT), ale jak dotąd nie udało się.

Jeśli ktoś może mi pomóc tutaj mogłem skupić się na kolejne wyzwanie - co czyni go prawdziwą czytnika kanałów: P

góry dzięki,

+0

Jestem też bardzo nowy na Androida, ale myślałem, że Intents miał to zrobić dla ciebie. Jak uruchamiasz działanie C? –

+0

Intent i = new Intent (MixesActivity.this, StreamController.class); \t i.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); \t startActivity (i); Edytuj> Flagi, które są tam w celach testowych. –

+0

Witam, o ile mi wiadomo, zamiary mogą pomóc przekazać wiadomość między różnymi działaniami, więc wywołaj instancję Intent w każdej klasie java, aby przełączać się pomiędzy tymi akcjami, wiążąc akcje z tymi przyciskami itd. Przepraszamy za nie więcej propozycji ... "C jest otwierany po raz drugi i odtwarzane są dwa strumienie", co oznacza, że ​​C nie jest On OnPaused po naciśnięciu listy? Przy okazji, czy FLAG jest niezbędny? – ladyfafa

Odpowiedz

18

Trzeba flagą swoją actvity albo jako "singleTask" lub "singleInstance" w twoim manifeście. Nie pamiętam dokładnie różnic między 2, ale albo powinien zrobić, co chcesz. SingleInstance po prostu robi coś innego ze stosem.

Przykład:

<activity android:name="MainActivity" android:launchMode="singleInstance"></activity> 

może obsługiwać nowe połączenia do startActivity() z tej samej instancji działalności z onNewIntent()

+0

Szczegóły można znaleźć tutaj: http://developer.android.com/guide/topics/manifest/activity-element.html#lmode – elevine

+0

Próbowałem tego, w rzeczywistości eksperymentowałem ze wszystkimi możliwe kombinacje (na tyle, na ile widzę) .W tym momencie zarówno B, jak i C mają te właściwości android: launchMode i nie pomogły. Nie może to być błąd MediaPlayer, w przypadku zwykłego MediaPlayer don ' t masz ten problem: –

+1

Czy jesteś pewien, że istnieją 2 instancje activityC i nie uruchamiasz dwukrotnie programu mediaplayer? Pokaż nam kod aktywityc – Falmarri

5

Mam ją!

Dla osób czytających to pytanie i chcących poznać podsumowanie: błędnie sądziłem, że działało więcej niż jedno działanie, ale okazało się, że więcej uruchomiono instancji MediaPlayer. Zrobiłem mój mediaplayer członkiem klasy i teraz kontroluję go ze zdarzenia onStart().

Używam SharedPreferences, aby sprawdzić, czy strumień musi zresetować i zmienić źródło, lub kontynuować działanie i po prostu pokazać interfejs.

Dziękuję za wszystkie reakcje. Naprawdę mi pomogłem.

-7

wystarczy zmienić nazwy pakietów w .xml

EX: com.org.MainActivity zmiana .org.MainActivity

To działa na mnie ..... yup

+0

Proszę usunąć tę odpowiedź. kthx – Gibolt

Powiązane problemy