Po pierwsze potrzebujesz pozwolenia w AndroidManifest.xml
:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Również w swoim AndroidManifest.xml
zdefiniuj usługę i nasłuchuj akcji BOOT_COMPLETED :
<service android:name=".MyService" android:label="My Service">
<intent-filter>
<action android:name="com.myapp.MyService" />
</intent-filter>
</service>
<receiver
android:name=".receiver.StartMyServiceAtBootReceiver"
android:label="StartMyServiceAtBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Następnie musisz zdefiniować odbiornik, który otrzyma akcję BOOT_COMPLETED i uruchomi usługę.
public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
}
}
}
A teraz usługa powinna być uruchomiona, gdy telefon się uruchomi.
Intent.ACTION_BOOT_COMPLETED
zamiast zakodować ciąg w odbiorniku. Ponadto, należy użyć nowegoIntent(context, MySystemService.class)
konstruktora podczas tworzenia zamiaru.Multiple markers at this line - BroadcastReceiver cannot be resolved to a type - The public type StartMyServiceAtBootReceiver must be defined in its own file
napublic class
linię. Jakieś pomysły?W ten sposób na podjęcie działalności zaczynają biec po restarcie urządzenia android:
Wstaw ten kod do
AndroidManifest.xml
pliku, w<application>
elemencie ( nie w<activity>
elemencie):Następnie utwórz nową klasę
yourActivityRunOnStartup
(pasującą doandroid:name
podanej dla<receiver>
elementu w manifeście):Uwaga: Wywołanie
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
jest ważne, ponieważ działanie jest uruchamiane z kontekstu poza działaniem. Bez tego działanie nie rozpocznie się.Ponadto, wartości
android:enabled
,android:exported
aandroid:permission
w<receiver>
tagu nie wydają obowiązkowe. Aplikacja odbiera zdarzenie bez tych wartości. Zobacz przykład tutaj .źródło
Application
? Może w środkuonCreate()
?onReceive()
oBroadcastReceiver
Słuchaj ACTION_BOOT_COMPLETE i rób odtąd wszystko, czego potrzebujesz. Jest tutaj fragment kodu .
Aktualizacja:
Oryginalny link przy odpowiedzi jest wyłączony, więc w oparciu o komentarze, tutaj jest kod połączony, ponieważ nikt nigdy nie przeoczyłby kodu, gdy linki są wyłączone.
W AndroidManifest.xml (część aplikacji):
...
...
Źródło: https://web.archive.org/web/20150520124552/http://www.androidsnippets.com/autostart-an-application-at-bootup
źródło
Dodatkowo możesz użyć aplikacji takiej jak AutoStart, jeśli nie chcesz modyfikować kodu, aby uruchomić aplikację na Androida podczas uruchamiania: AutoStart - Bez roota
źródło
Rozwiązanie Seana początkowo nie działało dla mnie (Android 4.2.2). Musiałem dodać fikcyjną aktywność do tego samego projektu na Androida i przynajmniej raz uruchomić ją ręcznie na urządzeniu. Następnie rozwiązanie Seana zaczęło działać, a BroadcastReceiver został powiadomiony o kolejnych uruchomieniach.
źródło
Chciałbym dodać jeden punkt w tym pytaniu, z którym miałem do czynienia przez kilka dni. Próbowałem wszystkich odpowiedzi, ale te nie działały dla mnie. Jeśli używasz Androida w wersji 5.1, zmień te ustawienia.
Jeśli używasz Androida w wersji 5.1, musisz odznaczyć (Ogranicz, aby uruchomić) w ustawieniach aplikacji.
ustawienia> aplikacja> Twoja aplikacja> Ogranicz, aby uruchomić (usuń zaznaczenie)
źródło
Innym podejściem jest użycie
android.intent.action.USER_PRESENT
zamiastandroid.intent.action.BOOT_COMPLETED
unikania spowolnień podczas procesu uruchamiania. Ale dzieje się tak tylkotrue
wtedy, gdy użytkownik włączył ekran blokady - w przeciwnym razie ten zamiar nigdy nie zostanie nadany.Blog referencyjny - Problem z intencją ACTION_USER_PRESENT w Androidzie
źródło