2014-10-10 307 views
1

我有一套可以通過adb通過tcp/ip訪問的rooted android設備。 我試圖通過從命令行(來自/ system/media/audio的.ogg文件之一)播放聲音來識別特定的聲音。Android adb shell命令從命令行播放聲音

我知道我可以爲此構建一個應用程序,但感覺像使用APK的矯枉過正,我希望有更原生的方式。我已經知道如何從命令行啓動意圖。

事情我已經嘗試:

  • 查處使用service call media.player也沒有找到有關語法任何有用的參考。我可以看到dumpsys media.player有關AwesomePlayer的參考資料,但是沒有任何結果。
  • 試圖從android源代碼中找到「/system/bin/media」的編譯版本,因爲它在設備中缺失,但目前爲止沒有任何運氣。
  • 試圖建立一個命令行Java應用程序調用android.media.MediaPlayer與dalvikvm但我的Android和Java的知識太有限(編譯類,但抱怨在運行時缺少的依賴)

任何想法?

+0

希望這可以幫助你:http://stackoverflow.com/questions/2203495/adb-shell-commands-to-change-settings-or-perform-tasks-on-a -phone – krossovochkin 2014-10-10 11:38:24

+1

感謝您的快速回復。實際上,我試圖避免啓動用戶應用程序,並儘可能尋找更多系統原生解決方案。 – Benjamin 2014-10-10 11:53:57

+1

我發現這篇文章:http://a3nm.net/blog/android_cli.html 有'stagefright'被提及。 在AOSP的「stagefried」中也提到過:https://source.android.com/devices/media.html 可能你可以試着朝這個方向看。 希望它有幫助 – krossovochkin 2014-10-11 07:09:15

回答

4

經過一些試驗和錯誤,我會回答現在爲我工作。

根據other threads,我發現下面的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); 
     } 
} 

actual working example is here

那麼這一定是compiled as a dex file,掛的android.jar

export CLASSPATH=./Beep.dex 
app_process /system/bin Beep /system/media/audio/ringtones/Beep-beep.ogg 

這不是一個班輪我所期待的,但確實:,
終於可以使用app_process(未dalvikvm)亞行shell命令行運行我需要什麼...