从 Android 上的本机代码读取铃声文件
Posted
技术标签:
【中文标题】从 Android 上的本机代码读取铃声文件【英文标题】:Reading ringtone file from native code on Android 【发布时间】:2013-03-04 17:21:03 【问题描述】:我一直在开发一个应用程序,该应用程序需要我从本机代码播放适当的铃声。直到现在我没有找到解决我的问题的方法。是否有任何已知的方法可以让铃声字节解码和播放它们,即:OpenSL ES?
我目前的印象是,这些文件通常是受保护的,需要 root 或其他一些不正当的机制才能访问。这是正确的吗?
提前致谢。
【问题讨论】:
***.com/questions/3289038/… 【参考方案1】:我已经为这个问题找到了一个可行的解决方案,它涉及到 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;
【讨论】:
以上是关于从 Android 上的本机代码读取铃声文件的主要内容,如果未能解决你的问题,请参考以下文章