2011-01-08 11 views
4

Weiß jemand, warum meine Anwendung die ACTION_BOOT_COMPLETED-Übertragung auch dann empfängt, wenn meine App nicht die Berechtigung android.permission.RECEIVE_BOOT_COMPLETED in der Manifestdatei hat? Ich dachte, es wäre erforderlich, aber ein paar Tutorials, die ich auch verwendet habe, hatten es nicht. Einige taten es. Ich benutze mein Telefon mit CyanogenMod zum Testen, aber ich bezweifle, dass das wichtig ist. LogCat zeigt bei jedem Start das Protokoll "Notified of boot" an. Siehe unten für den verwendeten Code.Ist android.permission.RECEIVE_BOOT_COMPLETED nicht erforderlich?

AndroidManifest.xml

<receiver android:name="AlarmReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    <category android:name="android.intent.category.HOME" /> 
    </intent-filter> 
    </receiver> 

AlarmReceiver Klasse

public class AlarmReceiver extends BroadcastReceiver { 
    private static final String TAG = "MyProgram"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    try { 
      if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { 
    Log.d(TAG, "Notified of boot"); 
      } 
      Intent newIntent = new Intent(context, MyService.class); 
      context.startService(newIntent); 
    } catch (Exception e) { 
    Log.d(TAG, "An alarm was received but there was an error"); 
    e.printStackTrace(); 
    } 
    } 
    } 

ich revisited diese auf dem Emulator und erfolgreich reproduziert das "Problem" auf Android 2.1, 2.2 und 2.3. Ich bekomme einen ANR (wie erwartet), da der Emulator nicht die Datenbank hat, die meine App abfragt. Wenn ich alle angegebenen Verwendungen-Berechtigungen aus dem Manifest entferne, erhalte ich die erwarteten Berechtigungsverweigerungsfehler, wenn ich versuche, meine App zu verwenden. Ich erhalte jedoch immer noch die ACTION_BOOT_COMPLETED-Absicht, die beim Booten übertragen wird. Irgendwelche Vorschläge?

+0

"Ich benutze mein Telefon mit CyanogenMod zum Testen, aber ich bezweifle, dass das wichtig ist" - seien Sie nicht so sicher. Testen Sie Anomalien wie diese gegen mindestens einen Emulator mit Android-Betriebssystem, um zu bestätigen, dass es nichts mit dem ROM zu tun hat. Dies ist kein Schlag auf Cyanogen - ich würde die gleiche Empfehlung machen, wenn Sie die gleichen Symptome auf einem HTC oder Motorola-Gerät haben. – CommonsWare

+0

@CommonsWare: Wahr. Leider verwendet meine App Funktionen, die im Emulator nicht verfügbar sind. Ich werde mir jemandes Gerät ausleihen, um weiterhin zu versuchen, meine aktuelle Umgebung auszuschließen. Danke für den Vorschlag. – capitalf

+0

@CommonsWare Ich habe dies auf dem Emulator nochmals gelesen und das "Problem" auf Android 2.1, 2.2 und 2.3 erfolgreich reproduziert. Ich erhalte einen ANR, da der Emulator nicht über die Datenbank verfügt, die meine App abfragt. Wenn ich alle angegebenen Verwendungen-Berechtigungen aus dem Manifest entferne, erhalte ich die entsprechenden Fehler, wenn ich versuche, meine App zu verwenden. Ich erhalte jedoch immer noch die ACTION_BOOT_COMPLETED-Absicht, die beim Booten übertragen wird. – capitalf

Antwort

7

Dies scheint ein Fehler in Android zu sein. Ich kann das Problem auf normaler Nexus One- und Nexus S-Hardware reproduzieren. Ich habe eine bug report darauf abgelegt.

+0

Vielen Dank, dass Sie sich das angesehen haben. Ich habe das Problem beobachtet, um wachsam zu bleiben. Ich habe mehrere Apps installiert, die beim Booten ohne diese Erlaubnis gestartet werden, also wird es nett sein, dies erzwungen zu sehen. – capitalf

Verwandte Themen