it-swarm.com.de

Starten Sie die Android-Anwendung ohne Aktivität

Ich habe eine Anwendung, die nur als Dienst ausgeführt werden soll (keine Schnittstelle, nur im Hintergrund). Ich habe in meinem AndroidManifest.xml keine Aktivität erwähnt, aber ich lege einen Empfänger an, um die Anwendung beim Telefonstart zu starten.

<application
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name" >
    <service
        Android:enabled="true"
        Android:name=".MyAppService">
        <intent-filter>
            <action
                Android:name = "me.myapp.MyAppService">
            </action>
        </intent-filter>
    </service>
    <receiver
        Android:enabled="true"
        Android:name=".BootReceiver">
        <intent-filter>
            <action Android:name = "Android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>
</application>

Das Problem ist, dass ich, während ich die Anwendung entwickle (mit Eclipse), häufig meine Änderungen testen muss. Wenn ich die Anwendung (mit meinem Telefon im Debug-Modus) ausgeführt habe, habe ich eine Nachricht wie

[2011-12-14 00:18:40 - MyApp] Android Launch!
[2011-12-14 00:18:40 - MyApp] adb is running normally.
[2011-12-14 00:18:40 - MyApp] No Launcher activity found!
[2011-12-14 00:18:40 - MyApp] The launch will only sync the application package on the device!
[2011-12-14 00:18:40 - MyApp] Performing sync

Wie kann ich die Anwendung beim Start starten, ohne sie jedes Mal neu starten zu müssen?


Bearbeiten Dies ist für Android 3.1 oder höher nicht mehr möglich. Quelle

24
Martin Trigaux

Abgesehen von den zwei von EboMike genannten Optionen: Sie können den BOOT_COMPLETED-Broadcast immer über die Befehlszeile senden, anstatt das Telefon neu zu starten.

Benutzen

adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED

Dies führt zu einer Situation wie nach einem tatsächlichen Neustart und löst auch alle Boot-Receiver von Drittanbieter-Apps aus. Nach der einmaligen Eingabe in ein Terminal können Sie es normalerweise wiederholen, indem Sie die Aufwärtspfeiltaste drücken und bei den meisten Betriebssystemen die Eingabetaste drücken. Oder Sie können es in ein Skript aufnehmen, das nach der Neuinstallation Ihrer App ausgelöst wird. 


Wenn Sie die Übertragung nur auf Ihre App beschränken möchten, können Sie auch eine Komponente angeben:

adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED -n your.app.packagename/.YourReceiverClassName

Dadurch wird das Reboot-Broadcast nur an Ihren Receiver gesendet. Alle anderen Apps werden nicht aufgerufen.

33
user658042

Option 1: Fügen Sie eine Dummy-Aktivität hinzu, mit der Ihr Dienst gestartet wird. Entfernen Sie es vor dem Versand.

Option 2: Erstellen Sie eine zweite Testanwendung, die Ihren Dienst startet.

2
EboMike

Starten des Dienstes mithilfe eines Broadcast-Empfängers über eine beliebige Absicht 

Android.intent.action.BOOT_COMPLETED 

ist über Android 3.1 nicht möglich, bis der Benutzer Ihre App verwendet , . Um Ihre App verwenden zu können, muss es eine einzige Aktivität außerhalb der Benutzeroberfläche geben (die in oncreate () als finish bezeichnet werden kann).

Siehe den Beweis hier

1