2012-03-27 9 views
5

Napisałem małą aplikację użytkową dla mojego telefonu, która zatrzymała denerwującego przewoźnika pod warunkiem, że grał przy starcie systemu. Zauważyłem, że dźwięk nie był odtwarzany, gdy włączam telefon w tryb cichy przed wyłączeniem zasilania, więc napisałem to małe narzędzie, aby wyciszyć dźwięk i przywrócić dźwięk podczas startu. To zadziałało dobrze dla Galaxy S2 na Gingerbread. Cały kod jest w dwóch klasach:BroadcastReceivers w 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); 
    } 

} 

i

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); 
    } 
} 

Manifest jest

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

Teraz mój telefon został zaktualizowany do ICS przez mojego przewoźnika, to już nie działa. Jeśli przełączę telefon w tryb cichy przed wyłączeniem zasilania, dzwonek nie działa. Dlatego podejrzewam, że żaden z odbiorników nie został wyzwolony. (Wrzuciłem kod do niektórych odbiorników, które się nie pojawiły, ale podejrzewam, że z powodu taktów nie był wyświetlany pod Gingerbread).

Wszelkie sugestie, dlaczego nie będzie pracować już?

Odpowiedz

9

Po całkowitym odinstalowaniu i ponownym zainstalowaniu aplikacji problem polega na tym, że nie masz żadnej aktywności.

Począwszy od systemu Android 3.1 aplikacje są instalowane w stanie "zatrzymanym", w którym odbiorniki telewizyjne nie będą działać, dopóki użytkownik nie uruchomi ręcznie działania. To jest ruch przeciwko złośliwemu oprogramowaniu. I blogged about this ~9 months ago.

+0

Myślę, że rozumiem. Więc jeśli dodaję fikcyjną aktywność z Toastem lub czymś i uruchamiam ją tylko raz, to powinno działać później? – NickT

+0

@NickT: Tak. Jeśli rozpowszechniasz tę aplikację, możesz użyć kilku sztuczek, aby wyłączyć składnik we wcześniejszych wersjach Androida, aby nie zaśmiecać programu uruchamiającego. Oto przykładowy projekt, w którym używam tej sztuczki: https://github.com/commonsguy/cw-advandroid/tree/master/RemoteViews/Plugin – CommonsWare

+0

Dzięki, że działa dobrze teraz, ratuje mnie od społecznego zakłopotania, kiedy włączam telefon na. (P.S. wycinałem i wklejałem "cichy" i "normalny" w niewłaściwy sposób z prawdziwego kodu, kiedy po raz pierwszy opublikowałem pytanie). – NickT