我一直在开发一个需要我从本机代码播放适当铃声的应用程序。直到现在我没有找到解决我的问题的方法。是否有任何已知的方法可以让铃声字节解码和播放它们,即:OpenSL ES?
我目前的印象是,这些文件通常是受保护的,需要 root 或其他一些不正当的机制才能访问。它是否正确?
提前致谢。
对于这个问题,我有一个可行的解决方案,它涉及 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;
}