Grant,
Kwestia tutaj jest wyraźnie nieporozumieniem dla modelu aplikacji Android. Commonsware ma absolutną rację, jeśli chodzi o rozwiązanie tego problemu. Jednak bez zrozumienia podstaw Android, widzę, dlaczego masz trudności z zastosowaniem go. Krótkie wyjaśnienie:
Każda operacja w Androidzie zaczyna się od intencji. Dotyczy to w szczególności działań. Każde działanie ma intencję. Aby interfejs był łatwy dla programistów, możesz odpowiedzieć na zamiar z systemu operacyjnego, LUB możesz utworzyć Intent z klasy Działania, której chcesz użyć. Ogólnie najlepszą praktyką jest wykonanie pierwszej opcji.
Odpowiadając zamiarem
Podczas podnoszenia zamiarem odpowiedzieć, można dosłownie odpowiedzi na ich przeznaczenie. Nazywa się to Akcją. Jeśli utworzyłem intencję zwaną "FOO", Aktywność Baru może ją odebrać i odpowiedzieć. Mamy jednak konwencje, a podstawową zasadą jest podawanie nazwy pakietu w jakimkolwiek intencjach. Na przykład "com.company.package.FOO". Mówiąc najprościej, jest tak, aby uniknąć kolizji z innymi aplikacjami.
Każde działanie może reagować na różne zdarzenia. Jest to określone w AndroidManifest.xml.
<activity android:name="Activity3" ... >
<intent-filter>
<action android:name="com.company.package.FOO"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
powyżej, również ustawić kategorię do domyślnych ustawień, tak, że jeśli użytkownik zmieni go, będziemy tylko aplikacja, która reaguje na nasze zlecenie intencyjny. Sposób, w jaki my wywołujemy Intent jest użycie tej samej nazwie, że stworzenia (czyli „com.company.package.FOO”)
startActivity(new Intent("com.company.package.FOO"));
To jak to działa! Po prostu zmieniłbyś powyższy "com.company.package.FOO" na swoją nazwę pakietu (zdefiniowaną przez twoją aplikację) i coś znaczącego. Przykładem jest "com.testapp.ws.SWAT_FLIES".
Dlaczego Twój kod nie działa
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.testapp.ws");
Powyższy kod wygląda dla konkretnego rodzaju Intent działania.Pamiętaj, kiedy dokonał AndroidManifest i pierwszy aktywny można umieścić:
<action android:name="android.intent.action.MAIN">
<category android:name="android.intent.category.LAUNCHER">
Cóż ... getLaunchIntentForPackage() pobiera tylko intencyjny w tej pierwszej czynności. To jest DLACZEGO tworzymy niestandardowe intencje ... Po pierwsze, ponieważ tak naprawdę nie chcemy aby nasza 3. Aktywność była naszym początkiem ... A po drugie, ponieważ system operacyjny powie nam tylko Aktywność początkową. Musimy powiedzieć to z naszego własnego działania (tj „com.testapp.ws.SWAT_FLIES”)
nadzieję, że to pomoże,
FuzzicalLogic
Dzięki Mr.Fuzzical Logic za szczegółowy opis. Po przekazaniu wyjaśnień, pomyślnie zaimplementowałem aplikację. Dziękuję bardzo! – Grant
jak to osiągnąć, jeśli chcę wysłać dane z jednej czynności w jednej aplikacji do usługi w innej aplikacji? – Aada
Właściwie, po prostu potrzebujesz akcji Intent i wysyłasz dane przez setExtra przed uruchomieniem startService(). Być może będziesz musiał najpierw skonstruować Intent (tj. Intent myIntent = new Intent ("com.company.app.ACTION") –