Hoe een Android-applicatie automatisch te starten?

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.xmlom RECEIVE_BOOT_COMPLETEDtoestemming toe te voegen

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

Bewerk uw AndroidManifest.xmlapplicatiegedeelte 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 BootUpReceiverom 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);  
    }
}

Other episodes