从Android上的本机代码中读取铃声文件

时间:2013-03-04 17:21:04

标签: android c audio native

我一直在开发一款应用程序,要求我从本机代码中播放相应的铃声。直到现在我找不到我的问题的解决方案。是否有任何已知的方法来获取铃声字节进行解码和播放,即:OpenSL ES?

我目前的印象是,这些文件通常受到保护,需要访问root或其他一些shady机制。这是对的吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我有一个解决此问题的工作方案,它涉及1个JNI调用以获取ParcelFileDescriptor,以便获得可在本机上用于OpenSLES的适当FD。 只需要记住保存ParcelFileDescriptor 关闭最后的FD,而不是垃圾收集。

注意: API级别需要12才能获得FD

注意2:如果你想要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;
}