Как автоматически запустить приложение для 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);  
    }
}
Другие вопросы по тегам