Как автоматически запустить приложение для Android?
Я не уверен, как автоматически запустить приложение для Android после завершения загрузки эмулятора Android. У кого-нибудь есть фрагменты кода, которые помогут мне?
4 ответа
Вы должны добавить запись разрешения манифеста:
<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>
Отредактируйте свой 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>
Теперь напишите ниже в Activity.
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);
}
}
Если под автозапуском вы подразумеваете автозапуск при загрузке телефона, вам необходимо зарегистрировать BroadcastReceiver для BOOT_COMPLETED
Намерение. Системы Android транслируют это намерение после завершения загрузки.
Как только вы получите это намерение, вы можете запустить Сервис, который может делать все, что вы хотите.
Имейте в виду, что, несмотря на то, что служба постоянно работает на телефоне, это плохая идея, так как она потребляет системные ресурсы, даже когда она простаивает. Вы должны запускать свою Службу / приложение только тогда, когда это необходимо, а затем останавливать его, когда это не требуется.
Я всегда вхожу сюда, по этой теме. Я положу свой код здесь, чтобы я (или другой) мог использовать его в следующий раз. (Фу ненавижу искать в моем коде репозитория).
Добавьте разрешение:
<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);
}
}