Uruchom aplikację na Androida bez głównej Aktywności i uruchom usługę po uruchomieniu aplikacji

91

W mojej aplikacji mam następujący scenariusz. W mojej aplikacji nie ma interfejsu użytkownika; zamiast tego istnieje Usługa, która uruchamia się podczas rozruchu i będzie działać w sposób ciągły.

Jak mogę skonfigurować plik manifestu bez głównego działania? Czy mogę uruchomić moją aplikację bez żadnej aktywności? Po uruchomieniu mojej aplikacji usługa powinna się rozpocząć. czy to możliwe?

Nie chcę wykonywać półprzezroczystego działania, aby uruchomić usługę.

Meher
źródło
spójrz na to [pytanie] [1] [1]: stackoverflow.com/questions/4468006/…
Munish Kapoor

Odpowiedzi:

125

Powiedziałeś, że nie chcesz używać przezroczystego działania, ale wydaje się, że jest to najlepszy sposób:

  1. W swoim Manifeście ustaw motyw działania na Theme.Translucent.NoTitleBar.
  2. Nie przejmuj się układem swojej aktywności i nie dzwoń setContentView().
  3. W swojej aktywności onCreate()rozpocznij usługę z startService().
  4. Wyjdź z działania finish()po uruchomieniu usługi.

Innymi słowy, Twoja aktywność nie musi być widoczna; może po prostu upewnić się, że usługa jest uruchomiona, a następnie zakończyć, co brzmi tak, jak chcesz.

Zdecydowanie polecam wyświetlenie przynajmniej powiadomienia Toast wskazującego użytkownikowi, że uruchamiasz Usługę lub że jest ona już uruchomiona. To bardzo złe doświadczenie użytkownika, gdy ikona programu uruchamiającego wydaje się nic nie robić po jej naciśnięciu.

Darshan Rivka Whittle
źródło
2
po uruchomieniu aplikacji wyświetla mi się pusty ekran. co nie ma miejsca ...
Meher
1
@meher Właśnie to przetestowałem i działało idealnie dla mnie - moja usługa została uruchomiona i nie widziałem żadnej Aktywności, nawet przez chwilę. Opublikuj treść swojego działania onCreate (), a powinniśmy być w stanie ustalić, co jest nie tak.
Darshan Rivka Whittle
kiedy instaluję aplikację po raz pierwszy, widzę, że aktywność zostaje uruchomiona i znika w ciągu sekundy.
Meher
public class TestActivity rozszerza Activity {/ ** Wywoływana podczas pierwszego tworzenia działania. * / @Override public void onCreate (Bundle savingInstanceState) {super.onCreate (saveInstanceState); Log.i ("aktywność", "uruchamianie usługi"); startService (new Intent (TestActivity.this, MyService.class)); koniec(); }}
Meher
1
Zdaję sobie sprawę, że to stare pytanie, ale wydaje się, że już nie działa. Zmiana głównego motywu działania na Theme.Translucent.NoTitleBar lub Theme.Translucent.NoTitleBar.FullScreen powoduje, że działająca w innym przypadku aplikacja na krótko wyświetla ekran aktywności na taki, który zawsze powoduje komunikat „aplikacja przestała odpowiadać”.
alzee
33

Tak, możesz to zrobić, po prostu tworząc plik, BroadcastReceiverktóry wywołuje twój Servicepodczas uruchamiania aplikacji. Oto pełna odpowiedź udzielona przeze mnie.
Android - Uruchom usługę podczas rozruchu

Jeśli nie chcesz żadnej ikony / programu uruchamiającego dla siebie Aplikacja, możesz to również zrobić, po prostu nie twórz żadnej aktywności za pomocą

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Po prostu zadeklaruj, Servicejak zwykle.

Lalit Poptani
źródło
2
Wygląda na to, że pytający jest w porządku przy uruchamianiu podczas Servicerozruchu, ale chce wiedzieć, jak nie mieć głównego Activity, ale po prostu upewnij się, że Servicedziała, gdy ikona programu uruchamiającego jest naciśnięta.
Darshan Rivka Whittle
2
Ale wygląda na to, że chcą ikony programu uruchamiającego, która po naciśnięciu zapewnia, że ​​Usługa działa. Twoja sugestia po prostu usuwa ikonę programu uruchamiającego.
Darshan Rivka Whittle
@LalitPoptani rozwiązanie jest w porządku, ale moja usługa nie uruchomi się, dopóki nie uruchomię telefonu.
Meher
4
Nie mogę uruchomić aplikacji bez MAIN, LAUNCHER w AndroidMenifest.xml z wyjątkiem SyncAdapter. Czy twoja odpowiedź jest prawdziwa?
sunghun
1
Usunąłem filtr intencji z tagami akcji i kategorii. Teraz aplikacja nie działa już w Android Studio
Nauman Ash
12

Powodem tworzenia aplikacji bez żadnej aktywności lub usługi może być utworzenie aplikacji z widżetem ekranu głównego, której nie trzeba uruchamiać.
Po rozpoczęciu projektu nie twórz żadnych działań. Po utworzeniu projektu po prostu naciśnij Uruchom. Studio Android powie No default activity found.

Kliknij Edytuj konfigurację (z menu Uruchom ) iw części opcji uruchamiania ustaw wartość Uruchom na Nic . Następnie kliknij OK i uruchom aplikację.

( Ponieważ nie ma aktywności programu uruchamiającego, żadna aplikacja nie będzie wyświetlana w menu Aplikacje ).

Mahdi-Malv
źródło
2
Dzięki, to był dokładnie mój przypadek. W przypadku, gdy nie widać Edit Configuration jak ja, wybierz polecenie Uruchom> Uruchom ... z menu głównego, a następnie wybierz polecenie Edycja konfiguracji ... .
pm_
6

Android Studio w wersji 2.3.0

Usługę bez aktywności głównej można utworzyć, wykonując kilka prostych kroków. Będziesz mógł zainstalować tę aplikację za pośrednictwem Android Studio i debugować ją jak zwykłą aplikację.

Najpierw utwórz projekt w Android Studio bez aktywności. Następnie utwórz klasę Service i dodaj usługę do pliku AndroidManifest.xml

<application android:allowBackup="true"
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <service android:name="com.whatever.myservice.MyService">
        <intent-filter>
            <action android:name="com.whatever.myservice.MyService" />
        </intent-filter>
    </service>
</application>

Teraz w menu rozwijanym obok przycisku „Uruchom” (zielona strzałka) przejdź do opcji „edytuj konfiguracje” iw obszarze „Opcje uruchamiania” wybierz „Nic”. Umożliwi to zainstalowanie usługi bez narzekania na brak aktywności głównej w Android Studio.

Po zainstalowaniu usługa NIE będzie działać, ale będzie można ją uruchomić za pomocą tego polecenia powłoki adb ...

am startservice -n com.whatever.myservice/.MyService

Mogę sprawdzić, czy działa z ...

ps | grep whatever

Jeszcze nie próbowałem, ale prawdopodobnie Android Studio może również automatycznie uruchomić usługę. Można to zrobić w tym menu „Edytuj konfiguracje”.

Merc
źródło
Otrzymuję następujący błąd z powłoki adb: Uruchamianie usługi: Intent {cmp = com.example.wolk.myapp / .MyIntentService} Błąd: Nie znaleziono; żadna usługa nie została uruchomiona. LOGCAT pokazuje: ActivityManager: nie zezwalaj na uruchamianie ServiceInfo {274d8af com.example.wolk.myapp.MyIntentService
Trismegistos