2012-03-27 10 views
5

Ich hatte eine kleine Utility-App nur für mein Handy geschrieben, die den nervigen Carrier Jingle gestoppt hat, der beim Hochfahren gespielt wurde. Ich habe bemerkt, dass der Sound nicht abgespielt wurde, wenn ich das Telefon vor dem Ausschalten in den Stummschaltungsmodus versetzt habe, also schrieb ich dieses kleine Hilfsprogramm, um beim Herunterfahren leise zu klingen und beim Booten den Sound wiederherzustellen. Dies funktionierte gut für ein Galaxy S2 auf Lebkuchen. Der gesamte Code in zwei Klassen:BroadcastReceivers in ICS

public class OnShutDownReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     AudioManager mgr=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
     mgr.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
    } 

} 

und

public class OnBootReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     AudioManager mgr=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
     mgr.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 
    } 
} 

Das Manifest ist

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.nbt.hush" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-sdk android:minSdkVersion="7" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <receiver android:name=".OnBootReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 
     <receiver android:name=".OnShutDownReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.ACTION_SHUTDOWN" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

Jetzt ist mein Telefon von meinem Träger ICS aktualisiert wurde, ist es nicht mehr funktioniert. Wenn ich das Telefon vor dem Ausschalten in den Lautlos-Modus setze, wird der Jingle nicht abgespielt. Daher vermute ich, dass keiner der Empfänger ausgelöst wird. (Ich habe einige Log-Codes in die Empfänger, die nicht angezeigt, aber ich vermute, dass wegen der Timings möglicherweise nicht unter Gingerbread entweder angezeigt worden.)

Alle Vorschläge bitte, warum es nicht Arbeit mehr?

Antwort

9

Wenn Sie die App vollständig deinstalliert und neu installiert haben, besteht das Problem, dass Sie keine Aktivität haben.

Beginnend mit Android 3.1 werden Anwendungen in einem Zustand "stopped" installiert, in dem keine Broadcast-Empfänger funktionieren, bis der Benutzer manuell eine Aktivität startet. Dies ist eine Anti-Malware-Aktion. I blogged about this ~9 months ago.

+0

Ich denke, ich verstehe. Wenn ich also eine Dummy-Aktivität mit einem Toast oder etwas hinzufüge und es nur einmal austrage, sollte es danach funktionieren? – NickT

+0

@NickT: Ja. Wenn Sie diese App verteilen, können Sie mit einigen Tricks die Komponente in früheren Versionen von Android deaktivieren, sodass der Launcher nicht überlastet wird. Hier ist ein Beispielprojekt, wo ich diesen Trick verwende: https://github.com/commonsguy/cw-advandroid/tree/master/RemoteViews/Plugin – CommonsWare

+0

Danke, das funktioniert jetzt gut, rettet mich vor sozialer Verlegenheit, wenn ich das Telefon umlege auf. (P. S. Ich habe "still" und "normal" aus dem richtigen Code herausgeschnitten und eingefügt, als ich die Frage zum ersten Mal gestellt habe) – NickT