从 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 上的本机代码读取铃声文件的主要内容,如果未能解决你的问题,请参考以下文章

从android上的wav文件中读取原始数据

无法从目录中读取文件 - android

Android之来电铃声设置

Android为用户自定义号码设置自定义铃声

Unity可以从iOS上的蓝牙键盘读取输入吗?

从 Android 上的资产中读取音频文件