Android adb shell命令从命令行播放声音

Ben*_*min 3 android adb

我有一组 root 的 Android 设备,可以通过 adb 通过 tcp/ip 访问。我试图通过从命令行播放声音(/system/media/audio 中的 .ogg 文件之一)来识别特定的声音。

我知道我可能可以为此构建一个应用程序,但使用 APK 感觉有点大材小用,我希望有一种更原生的方式。我已经知道如何从命令行启动意图。

我尝试过的事情:

  • 调查使用service call media.player但找不到任何有关语法的有用参考。我可以看到dumpsys media.player有关 AwesomePlayer 的参考资料,但无法进行任何操作。
  • 试图从 android 源代码中找到“ /system/bin/media ”的编译版本,因为它在设备中丢失,但到目前为止没有任何运气。
  • 尝试构建一个命令行java应用程序来调用android.media.MediaPlayer,dalvikvm但我对Android和java的了解太有限(类编译但抱怨运行时缺少依赖项)

有任何想法吗?

Ben*_*min 6

经过一番尝试和错误后,我将回答现在对我有用的问题。

基于其他线程,我发现以下 java 代码是通过扬声器播放声音的最低限度。MediaPlayer 类似乎是唯一一个无需用户交互即可播放的类,因为其他类需要真正的活动上下文......

public class Beep {

    public static void main(String[] a) {

        MediaPlayer mp = new MediaPlayer();

        try {
            mp.setDataSource("/system/media/audio/alarms/Ticktac.ogg");
            mp.prepare();
            mp.start();
        }
        catch (IOException e) {
            Log.w("Beep", "IOException", e);
        }
}
Run Code Online (Sandbox Code Playgroud)

实际工作示例在这里

然后必须将其编译为 dex 文件,链接到 android.jar,最后可以使用(不是 dalvikvm)
从 adb shell 命令行运行:app_process

export CLASSPATH=./Beep.dex
app_process /system/bin Beep /system/media/audio/ringtones/Beep-beep.ogg
Run Code Online (Sandbox Code Playgroud)

这不是我所希望的一句话,但它满足了我的需要......


小智 6

正如在另一个线程中看到的

如果您有一个文件,则可以使用单个 shell 命令来完成此操作:

am start -a android.intent.action.VIEW -d /sdcard/somthing/example.wav -t audio/wav
Run Code Online (Sandbox Code Playgroud)

  • 好吧,如果我在路径前面加上“file://”,它似乎可以工作。 (2认同)