[Android6.0]App中呼叫init.rc中的服務,從而執行shell指令碼
阿新 • • 發佈:2019-02-10
Author: Younix
Platform: RK3399
OS: Android 6.0
Kernel: 4.4
Version: v2017.07
需求:希望在 Android App 中新增 SPDIF 測試功能。對 Android App 開發不熟悉,為節省開發時間走 Android Audio Manager 太麻煩了。所以希望直接通過 shell 指令碼,呼叫 tinyplay 命令來進行。
Init.rc 中新增 spdiftest 服務
對於我這個專案,是在 init.tablet.rc 中新增
service spdiftest /system/bin/spdif-test
class main
disabled
oneshot
Device.mk 拷貝指令碼和測試音訊
工程 Device.mk 檔案(rk3399_mid.mk)中新增
PRODUCT_COPY_FILES += \
device/rockchip/rk3399/rk3399_mid/test/spdif-test:system/bin/spdif-test \
device/rockchip/rk3399/rk3399_mid/test/test-music.wav:system/media/audio/test-music.wav
Spdif-test 實際為測試指令碼
Test-music.wav 實際為測試音訊
測試指令碼 spdif-tset
如下
#!/system/bin/sh
tinymix -D 0 "Stereo DAC MIXL DAC L1 Switch" 1
tinymix -D 0 "Stereo DAC MIXR DAC R1 Switch" 1
tinymix -D 0 "OUT MIXL DAC L1 Switch" 1
tinymix -D 0 "OUT MIXR DAC R1 Switch" 1
tinymix -D 0 "HPOVOL L Switch" 1
tinymix -D 0 "HPOVOL R Switch" 1
tinymix -D 0 "HPO MIX HPVOL Switch" 1
tinymix -D 0 "HPO L Playback Switch" 1
tinymix -D 0 "HPO R Playback Switch" 1
tinyplay /system/media/audio/test-music.wav -D 1 -d 0
App 呼叫
在 App 中通過 SystemProperties.set(“ctl.start”,”spdiftest”);
呼叫 spdiftest 服務(實際是 spdif-test 指令碼)
private void setSpdifOn() throws IOException {
SystemProperties.set("ctl.start","spdiftest");
Log.v(TAG, "Call System Service 'spdiftest' in init.rc to test SPDIF.");
}