it-swarm.com.de

Wie starte ich meine App beim Start?

Ich habe versucht, den Beispielcode in this link zu verwenden, aber er scheint veraltet zu sein und funktionierte nicht. Welche Änderungen muss ich vornehmen und in welchen Dateien muss meine App automatisch gestartet werden, wenn Android den Bootvorgang abgeschlossen hat?

206
Poojan

Zunächst benötigen Sie die Erlaubnis in Ihrem AndroidManifest.xml:

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

Definieren Sie außerdem in IhremAndroidManifest.xml Ihren Dienst und warten Sie auf die Aktion BOOT_COMPLETED :

<service Android:name=".MyService" Android:label="My Service">
    <intent-filter>
        <action Android:name="com.myapp.MyService" />
    </intent-filter>
</service>

<receiver
    Android:name=".receiver.StartMyServiceAtBootReceiver"
    Android:label="StartMyServiceAtBootReceiver">
    <intent-filter>
        <action Android:name="Android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Dann müssen Sie den Empfänger definieren, der die Aktion BOOT_COMPLETED erhält, und Ihren Dienst starten.

public class StartMyServiceAtBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Intent serviceIntent = new Intent(context, MyService.class);
            context.startService(serviceIntent);
        }
    }
}

Und jetzt sollte Ihr Dienst ausgeführt werden, wenn das Telefon gestartet wird.

289
Sean Schulte

So lässt sich ein activity nach dem Neustart des Android-Geräts starten:

Fügen Sie diesen Code in Ihre AndroidManifest.xml-Datei ein, innerhalb des <application>-Elements (not innerhalb des <activity>-Elements):

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

<receiver
    Android:enabled="true"
    Android:exported="true" 
    Android:name="yourpackage.yourActivityRunOnStartup"
    Android:permission="Android.permission.RECEIVE_BOOT_COMPLETED">

    <intent-filter>
        <action Android:name="Android.intent.action.BOOT_COMPLETED" />
        <action Android:name="Android.intent.action.QUICKBOOT_POWERON" />
        <category Android:name="Android.intent.category.DEFAULT" />
    </intent-filter>

</receiver>

Erstellen Sie dann eine neue Klasse yourActivityRunOnStartup (die mit dem für das Android:name-Element im Manifest angegebenen <receiver> übereinstimmt):

package yourpackage;

import Android.content.BroadcastReceiver;
import Android.content.Context;
import Android.content.Intent;

public class yourActivityRunOnStartup extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent i = new Intent(context, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }

}

Hinweis: Der Aufruf i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ist wichtig, da die Aktivität von einem Kontext außerhalb der Aktivität gestartet wird. Ohne diese Aktion wird die Aktivität nicht gestartet.

Auch die Werte Android:enabled, Android:exported und Android:permission im <receiver>-Tag erscheinen nicht zwingend. Die App empfängt das Ereignis ohne diese Werte. Siehe das Beispiel hier .

101
thrylos

Hören Sie auf ACTION_BOOT_COMPLETE und machen Sie von dort aus, was Sie brauchen. Es gibt hier ein Code-Snippet .

Update:

Der ursprüngliche Link zur Beantwortung ist nicht verfügbar, also basierend auf den Kommentaren, hier ist der Code verlinkt, da niemand den Code jemals verpassen würde, wenn die Links nicht verfügbar sind.

In AndroidManifest.xml (Anwendungsteil):

<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>

...

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

...

public class BootUpReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
                Intent i = new Intent(context, MyActivity.class);  //MyActivity can be anything which you want to start on bootup...
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(i);  
        }

}

Quelle: https://web.archive.org/web/20150520124552/http://www.androidsnippets.com/autostart-an-application-at-bootup

54
Haphazard

Außerdem können Sie eine App wie AutoStart verwenden, wenn Sie den Code nicht ändern möchten, um eine Android-Anwendung beim Start zu starten: AutoStart - No root

10
Tony

Die Lösung von Sean hat anfangs nicht funktioniert (Android 4.2.2). Ich musste zu demselben Android-Projekt eine Dummy-Aktivität hinzufügen und die Aktivität mindestens einmal manuell auf dem Gerät ausführen. Dann begann die Lösung von Sean zu arbeiten und der BroadcastReceiver wurde nach einem Neustart benachrichtigt.

2
ole

Ein anderer Ansatz besteht darin, Android.intent.action.USER_PRESENT anstelle von Android.intent.action.BOOT_COMPLETED zu verwenden, um Verzögerungen während des Startvorgangs zu vermeiden. Dies ist jedoch nur dann true, wenn der Benutzer den Sperrbildschirm aktiviert hat - andernfalls wird diese Absicht niemals gesendet.

Referenzblog - Das Problem mit der ACTION_USER_PRESENT-Absicht von Android

0
user2627118

screenshot

Ich möchte in dieser Frage einen Punkt hinzufügen, dem ich einige Tage gegenüberstand. Ich habe alle Antworten ausprobiert, aber diese funktionierten nicht für mich. Wenn Sie die Android-Version 5.1 verwenden, ändern Sie diese Einstellungen.

Wenn Sie die Android-Version 5.1 verwenden, müssen Sie die App-Einstellungen deaktivieren (Auf Start beschränken).

einstellungen> App> Ihre App> Zum Starten einschränken (Auswahl aufheben)

0
Manish Yadav