Я не уверен, как автоматически запускать приложение для Android после того, как эмулятор Android завершит загрузку. У кого-нибудь есть фрагменты кода, которые мне помогут?
Как автозапуск приложения для Android?
Ответ 1
Вам нужно добавить запись разрешения манифеста:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
(конечно, вы должны указать все другие разрешения, которые использует ваше приложение).
Затем, реализуйте класс BroadcastReceiver, он должен быть простым и быстрым исполняемым. Наилучший подход - установить будильник в этом ресивере, чтобы разбудить ваш сервис (если нет необходимости держать его в режиме ожидания, как писал Прахаст).
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);
}}
Затем добавьте класс Receiver в файл манифеста:
<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>
Ответ 2
Отредактируйте свой AndroidManifest.xml
, чтобы добавить RECEIVE_BOOT_COMPLETED
разрешение
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Отредактируйте часть приложения AndroidManifest.xml
для ниже Разрешения
<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>
Теперь напишите ниже в Управлении.
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);
}
}
Ответ 3
Если автозапуск означает автоматический запуск при загрузке телефона, вы должны зарегистрировать BroadcastReceiver для BOOT_COMPLETED
Intent. Системы Android передают это намерение после завершения загрузки.
Как только вы получите это намерение, вы можете запустить службу, которая может делать все, что вы хотите сделать.
Следует помнить, что наличие службы, работающей все время на телефоне, обычно плохой идеей, поскольку она питается системными ресурсами, даже когда она не работает. Вы должны запустить свой сервис/приложение только при необходимости, а затем остановить его, когда это не требуется.
Ответ 4
Я всегда здесь, для этой темы. Я поставлю свой код здесь, чтобы я (или другой) мог использовать его в следующий раз. (Пытаюсь искать в моем коде репозитория).
Добавьте разрешение:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Добавить приемник и сервис:
<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" />
Создать класс Launcher:
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;
}
}
Создайте класс BootUpReceiver
, чтобы выполнить действие после перезагрузки android.
Например, запуск 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);
}
}