Ik weet niet zeker hoe ik een Android-toepassing automatisch moet starten nadat de Android-emulator klaar is met opstarten. Heeft iemand codefragmenten die me kunnen helpen?
Antwoord 1, autoriteit 100%
U moet een manifest-machtigingsitem toevoegen:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
(natuurlijk moet je alle andere rechten vermelden die je app gebruikt).
Implementeer vervolgens de BroadcastReceiver-klasse, deze moet eenvoudig en snel uitvoerbaar zijn. De beste aanpak is om een alarm in deze ontvanger in te stellen om uw service te wekken (als het niet nodig is om het zolang te laten lopen zoals Prahast schreef).
public class BootUpReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, MyService.class), PendingIntent.FLAG_UPDATE_CURRENT);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval, interval, pi);
}
}
Voeg vervolgens een ontvangerklasse toe aan uw manifestbestand:
<receiver android:enabled="true" android:name=".receivers.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>
Antwoord 2, autoriteit 55%
Bewerk uw AndroidManifest.xml
om RECEIVE_BOOT_COMPLETED
toestemming toe te voegen
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Bewerk uw AndroidManifest.xml
applicatiegedeelte voor onderstaande toestemming
<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>
Schrijf nu hieronder in Activiteit.
public class BootUpReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Antwoord 3, autoriteit 25%
Als u met automatisch starten automatisch starten bij het opstarten van de telefoon bedoelt, moet u een BroadcastReceiver registreren voor de BOOT_COMPLETED
-intentie. Android-systemen zenden die intentie uit zodra het opstarten is voltooid.
Zodra je die intentie hebt ontvangen, kun je een Service lanceren die kan doen wat je maar wilt.
Houd er echter rekening mee dat het over het algemeen een slecht idee is om een service continu aan de telefoon te hebben, omdat het systeembronnen opslokt, zelfs als het inactief is. U dient uw Service / applicatie alleen te starten wanneer dat nodig is en vervolgens te stoppen wanneer dit niet nodig is.
Antwoord 4, autoriteit 4%
Ik kom hier altijd binnen, voor dit onderwerp. Ik zal mijn code hier plaatsen zodat ik (of iemand anders) hem de volgende keer kan gebruiken. (Pfoe haat het om in mijn repository-code te zoeken).
Voeg de toestemming toe:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Ontvanger en service toevoegen:
<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>
<service android:name="Launcher" />
Klasstarter maken:
public class Launcher extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new AsyncTask<Service, Void, Service>() {
@Override
protected Service doInBackground(Service... params) {
Service service = params[0];
PackageManager pm = service.getPackageManager();
try {
Intent target = pm.getLaunchIntentForPackage("your.package.id");
if (target != null) {
service.startActivity(target);
synchronized (this) {
wait(3000);
}
} else {
throw new ActivityNotFoundException();
}
} catch (ActivityNotFoundException | InterruptedException ignored) {
}
return service;
}
@Override
protected void onPostExecute(Service service) {
service.stopSelf();
}
}.execute(this);
return START_STICKY;
}
}
Maak klasse BootUpReceiver
om actie te ondernemen nadat Android opnieuw is opgestart.
Start bijvoorbeeld MainActivity:
public class BootUpReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent target = new Intent(context, MainActivity.class);
target.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(target);
}
}