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ż?
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
@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
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