Am încercat, folosind mostre de cod în acest link dar se pare depășite și nu au de lucru. Deci, ce schimbări trebuie să fac și ce fișiere să aibă app mea începe în mod automat atunci când Android finisaje pornirea?
În primul rând, aveți nevoie de permisiunea ta AndroidManifest.xml
:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
De asemenea, în taAndroidManifest.xml
, definiți dvs. de servicii și de a asculta pentru RECEIVE_BOOT_COMPLETED acțiune:
<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>
Apoi, aveți nevoie pentru a defini receptor care va ia RECEIVE_BOOT_COMPLETED acțiune și de a începe dvs. de servicii.
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);
}
}
}
Și acum dvs. de servicii ar trebui să fie difuzate atunci când telefonul pornește.
Acesta este modul de a face o activitate începe să ruleze după android dispozitiv reboot:
Introduceți acest cod în AndroidManifest.xml dosarul, în termen de <aplicații> element (__nu__ în termen de
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:enabled="true"
android:exported="true"
android:name="yourpackage.yourActivityRunOnStartup"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
Apoi a crea o nouă clasă yourActivityRunOnStartup
(potrivire android:namespecificat de
package yourpackage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class yourActivityRunOnStartup extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
Notă:
Apelul i.addFlags(Intenție.FLAG_ACTIVITY_NEW_TASK);
este important, deoarece activitatea este lansat dintr-un context în afara activității. Fără acest lucru, activitatea nu va porni.
De asemenea, valorile android:activat,
android:exportate " și "android:permisiunea" în "
Asculta pentru ACTION_BOOT_COMPLETE și de a face ceea ce ai nevoie de acolo. Există o fragment de cod aici.
Actualizare:
Original link-ul de pe răspunsul este în jos, astfel încât pe baza comentariilor, aici este legat de cod, pentru că nimeni nu ar fi dor de cod atunci când link-uri sunt în jos.
În AndroidManifest.xml (cerere-parte):
<receiver android:enabled="true" android:name=".BootUpReceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
...
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
...
public class BootUpReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyActivity.class); //MyActivity can be anything which you want to start on bootup...
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
În plus, puteți utiliza o aplicație ca AutoStart, dacă tu dont doriți să modificați codul, pentru a lansa o aplicație android la pornire: AutoStart - Nu root
Sean's soluție n't de lucru pentru mine inițial (Android 4.2.2). Am avut de a adăuga un manechin de activitate pentru același proiect Android și desfășurarea activității manual de pe dispozitivul cel puțin o dată. Apoi Sean's soluție a început să lucreze și BroadcastReceiver a fost notificată după ulterioare repornește.
O altă abordare este de a folosi android.intenție.acțiune.USER_PRESENT "în loc de" android.intenție.acțiune.BOOT_COMPLETED` pentru a evita lent coborâșuri în timpul procesului de boot. Dar aceasta este doar "adevărat" dacă utilizatorul a activat Ecranul de blocare - în caz contrar, această intenție nu este difuzat.
Referință blog - Problema Cu Android ACTION_USER_PRESENT Intenție
Aș dori să adaug un punct la această întrebare care mi-a fost cu care se confruntă de câteva zile. Am incercat toate răspunsurile, dar alea nu au fost de lucru pentru mine. Dacă utilizați versiunea android 5.1 vă rugăm să schimbați aceste setări.
Dacă utilizați versiunea android 5.1 atunci trebuie să dis-selectați (Restrânge la lansare) din setările aplicației.
setări> aplicații > aplicații > Limita de a lansa (dis-selectați)