2013-03-04 63 views
0

我一直在研究一個應用程序,需要我從本機代碼播放適當的鈴聲。直到現在,我發現我的問題沒有解決方案。是否有任何已知的方式獲取鈴聲字節解碼和播放它們:即OpenSL ES?從Android上的本機代碼讀取鈴聲文件

我現在的感覺是,這些文件中,一般情況下,保護和需要被訪問超級用戶或其他一些見不得人的機制。它是否正確?

在此先感謝。

+1

http://stackoverflow.com/questions/3289038/play-audio-file-from-the-assets-directory – 2013-03-04 17:22:11

回答

0

我已經爲這個問題找到了一個可行的解決方案,它包含1個JNI調用以獲得ParcelFileDescriptor,以便獲得本地可用於OpenSLES的相應FD。 只需要記住保存ParcelFileDescriptor末收盤的FD和沒有得到垃圾收集。

注:所需要的API級別是12拿到FD

注2:如果Wnt信號可以detachFd(),然後你必須關閉FD上的原生代碼,並不需要保持基準。

static public ParcelFileDescriptor getFileDescriptor(Context context) { 
    Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); 

    ContentResolver contentResolver = context.getContentResolver(); 

    ParcelFileDescriptor openFileDescriptor; 
    try { 
     openFileDescriptor = contentResolver.openFileDescriptor(uri, "r"); 
    } catch (FileNotFoundException e) { 
     return null; 
    } 

    return openFileDescriptor; 
}