0

我一直在开发一个需要我从本机代码播放适当铃声的应用程序。直到现在我没有找到解决我的问题的方法。是否有任何已知的方法可以让铃声字节解码和播放它们,即:OpenSL ES?

我目前的印象是,这些文件通常是受保护的,需要 root 或其他一些不正当的机制才能访问。它是否正确?

提前致谢。

4

1 回答 1

0

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

注意:获取 FD 所需的API 级别为 12

注意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;
}
于 2013-03-05T10:22:44.783 回答