我一直在开发一款应用程序,要求我从本机代码中播放相应的铃声。直到现在我找不到我的问题的解决方案。是否有任何已知的方法来获取铃声字节进行解码和播放,即:OpenSL ES?
我目前的印象是,这些文件通常受到保护,需要访问root或其他一些shady机制。这是对的吗?
提前致谢。
答案 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;
}