W jaki sposób używając linii poleceń (skryptu) w Androidzie, można ustawić że o danej godzinie telefon ma wyłączyć wszystkie dźwięki na określoną ilość minut/godzin?
W jaki sposób używając linii poleceń (skryptu) w Androidzie, można ustawić że o danej godzinie telefon ma wyłączyć wszystkie dźwięki na określoną ilość minut/godzin?
Użycie do tego celu linii poleceń nie jest najlepszym pomysłem, gdyż takie rozwiązanie nie będzie uniwersalne - będzie mocno zależne od wersji API Androida (będzie wykorzystywało konkretne wartości stałych...)
Poniższy przykład będzie dotyczył wersji 2.3.5, ale postaram się pokazać skąd biorą się konkretne stałe i co oznaczają...
Zacznijmy od wyciszenia/pogłośnienia dźwięku
Do tego celu należy użyć usługi AudioManager'a.
Listę usług można uzyskać za pomocą polecenia:
> adb shell service list Found 62 services: 0 sip: [android.net.sip.ISipService] 1 phone: [com.android.internal.telephony.ITelephony] 2 htctelephony: [com.android.internal.telephony.IHtcTelephony] 3 iphonesubinfo: [com.android.internal.telephony.IPhoneSubInfo] 4 simphonebook: [com.android.internal.telephony.IIccPhoneBook] 5 isms: [com.android.internal.telephony.ISms] 6 htc_checkin: [android.os.ICheckinService] 7 bt_fm_radio: [com.broadcom.bt.service.framework.IPowerManager] 8 diskstats: [] 9 appwidget: [com.android.internal.appwidget.IAppWidgetService] 10 backup: [android.app.backup.IBackupManager] 11 uimode: [android.app.IUiModeManager] 12 usb: [android.hardware.usb.IUsbManager] 13 audio: [android.media.IAudioService] ...
Możliwości AudioManager'a (pozycja 13) opisuje interface IAudioService i tam trzeba szukać metod, które można wywołać.
Do wywołania metody usługi można użyć polecenia:
adb shell service call SERVICE CODE [i32 INT | s16 STR] ...
gdzie:
SERVICE - nazwa usługi
CODE - oznacza stałą identyfikującą wywoływaną metodę, a kolejne wartości to parametry metody (typ + wartość; i32 - int, s16 - string UTF16)
W naszym przypadku należy wywołać następującą metodę interfejsu:
public void setStreamVolume(int streamType, int index, int flags) throws android.os.RemoteException;
Metodę identyfikuje stała w tym samym interfejsie:
static final int TRANSACTION_setStreamVolume = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3); zaś: int FIRST_CALL_TRANSACTION = 0x00000001;
Parametry metody:
public static final int STREAM_RING = 2;
public static final int FLAG_SHOW_UI = 1;
decyduje, czy zmiana głośności ma być prezentowana graficznie.
Podsumowując, wyciszenie dzwonienia można zrealizować za pomocą polecenia:
> adb shell service call audio 4 i32 2 i32 0 i32 1
Do wywołania zadania o określonej porze należy użyć AlarmManager'a. Najlepiej zrealizować to programowo...