Kann nicht Debuggen, onReceive() in der boot abgeschlossen-Empfänger
Dank einer Tonne auf dieser Seite, ich habe erhebliche Fortschritte gemacht, mit meinem ersten Android-Projekt.
Ich versuche, die Hinrichtung auszusetzen, in der onReceive () - Methode ein boot abgeschlossen-Empfänger. Hier sind meine manifest-und Empfänger-code.
Android 2.3.3
API - 10
IDE - Eclipse
Läuft auf emulator
Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.demo.notepad3" >
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application android:icon="@drawable/icon" >
<activity
android:label="@string/app_name"
android:name=".ProjectTrackerHomeActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ProjectTrackerEditActivity" />
<receiver android:name=".ProjectTrackerNotification" />
<receiver
android:name=".ProjectTrackerOnBootReceiver" >
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
Empfänger:
public class ProjectTrackerOnBootReceiver extends BroadcastReceiver {
private ProjectTrackerDBAdapter mDbHelper;
@Override
public void onReceive(Context context, Intent intent) {
Debug.waitForDebugger();
AlarmManager
mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
//I place the break point at line 2, the alarm manager line
//Further code, irrelevant
}
Meinen Beobachtungen -
1. Wenn ich diese Anwendung im debug-Modus von eclipse, das break point ist auch nicht der hit.
2. Wenn ich eine andere Anwendung im debug-Modus, dieser Haltepunkt ist der hit momentan! Aber bevor ich fortfahren kann mit eine Schritt-für-Schritt-Ausführung, die Ausführung wird fortgesetzt. Es ist noch nicht vorbei.
Meine Argumentation für dieses Verhalten ist, dass -
1. Wenn ich eine andere Anwendung, da diese über die app bereits installiert ist, fängt das boot-komplette Sendung und damit den Haltepunkt. (Aber warum nicht die Ausführung halt am Haltepunkt?)
2. Wenn ich nur diese app, es wird zuerst installiert und in der Zeit, die für die installation, es findet die boot-komplette Sendung.
Kann ich bitte etwas Hilfe bei der unter-Abfragen -
1. Wie kann ich von der Ausführung halt am Haltepunkt ohne ihn weiter fortsetzen?
2. Kann ich irgendwie führen Sie eine bereits installierte version dieser app auf dem emulator im debug-Modus ", ohne es zu bekommen, frisch installiert" auf dem emulator jedes mal wenn ich es starten?
3. Gibt es etwas, was ich falsch mache oder fehlt etwas?
Bitte lassen Sie mich wissen, da ich wirklich brauchen, um zu Debuggen, onReceive() zu fangen weitere Anwendung Logik-bugs. Vielen Dank, Leute.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zum Herunterfahren des Telefons, und starten Sie es jemals sehen onReceive aufgerufen, aus
bootcompleted
. Debuggen, fügen Sie einfach eineLog
Anweisung inonReceive
anstatt einen Haltepunkt. Andernfalls müssen Sie einigeaction
zu denreceiver
immanifest
und dann manuellsendBroadcast(new Intent("someName"))
mit dem von Ihnen angegebenen Namen in derreceiver
element in dermanifest
.Nicht sicher, warum diese Frage so viele Male und es war so schwer, die Antwort zu finden, aber dies funktioniert wie ein champ für mich.
Können Sie nun Schritt für Schritt durch den code, wie normal. Spaß haben!
Verwenden Sie die folgende Zeile vor dem code, wo Sie wollen den debugger zu stoppen:
Andere Methode, die ich bevorzuge, da es bedeutet, dass Sie nicht brauchen, um das Gerät neu zu starten(langweilig, gradle dauert lange genug, um zu laden, als es ist), einfach die app ausführen im debug-Modus und simuliert dann eine Aktion, die call-Broadcast-Empfänger mit dem folgenden Befehl in Ihrem terminal.
Den oben erzeugt einen broadcast mit der Aktion "BOOT_COMPLETE" und Sie können nun Debuggen, ohne Neustart.