Как автоматически запустить приложение для Android? - PullRequest
49 голосов
/ 29 июня 2009

Я не уверен, как автоматически запустить приложение для Android после завершения загрузки эмулятора Android. У кого-нибудь есть фрагменты кода, которые мне помогут?

Ответы [ 4 ]

46 голосов
/ 24 февраля 2011

Вы должны добавить запись разрешения манифеста:

<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>
22 голосов
/ 01 октября 2012

Отредактируйте 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);  
}
}
12 голосов
/ 29 июня 2009

Если под автозапуском вы подразумеваете автозапуск при загрузке телефона, вам нужно зарегистрировать BroadcastReceiver для BOOT_COMPLETED Намерения.Системы Android транслируют эти намерения после завершения загрузки.

Как только вы получите это намерение, вы можете запустить Службу, которая может делать все, что вы хотите.время на телефоне, как правило, плохая идея, так как оно израсходует системные ресурсы, даже когда оно простаивает.Вы должны запускать свою Службу / приложение только тогда, когда это необходимо, а затем останавливать его, когда это не требуется.

0 голосов
/ 08 мая 2016

Я всегда вхожу сюда, по этой теме. Я положу свой код здесь, чтобы я (или другой) мог использовать его в следующий раз. (Фу ненавижу искать в моем коде хранилища).

Добавить разрешение:

<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);  
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...