Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 12
  • 68

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?

Grzegorz_Chojnowski_
  • Zapytał
  • @ Grzegorz_Chojnowski_ | 10.11.2015
    • lider
    • laureat
    • 40
    • 10
    • 57
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 0

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:

  • streamType - typ strumienia również określają stałe, np.:
public static final int STREAM_RING = 2;
  • index - określa głośność (0 - wyciszony)
  • flags - dodatkowe ustawienia, np. flaga:
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...

 

 

 

  • Odpowiedział
  • @ | 13.11.2015
  • TRENER MODERATOR ALTKOM AKADEMII