java - 如何在 AssetFileDescriptor 中获取 File 的 startOffset
问题描述
我正在使用 AssetFileDescriptor 通过调用我放在 app raw / assets 文件夹中的 getStartOffset 来获取 StartOffset。
对于不在资产/原始文件夹中的文件,如何使用 File 对象获得类似的 startOffset?但在应用商店下载并有一个文件对象。
AssetFileDescriptor fd0 = getResources().openRawResourceFd(R.raw.lycka);
AssetFileDescriptor fd1 = getResources().openRawResourceFd(R.raw.nuyorica);
fileAoffset = (int)fd0.getStartOffset();
fileAlength = (int)fd0.getLength();
fileBoffset = (int)fd1.getStartOffset();
fileBlength = (int)fd1.getLength();
File file = new File("data/user/0/com.myapp.com/files/audio/-LGHK12NDo83k9pHakIZ.m4a");
long fileLen = file.length();
// i want startOffset from File object as getting in AssetFileDescriptor
解决方案
如果你想 StartOffset 使用文件路径,你可以使用下面的代码
AssetFileDescriptor afd = null;
try {
AssetManager manager = context.getAssets();
afd = manager.openNonAssetFd(fileName);
return new long[] { afd.getParcelFileDescriptor().detachFd(),
afd.getStartOffset(),
afd.getLength() };
} catch (IOException e) {
if (!e.getMessage().equals("") && !e.getMessage().equals(fileName)) {
Log.e(LOGTAG, "Error while loading asset " + fileName + ": " + e);
}
return new long[] {-1, -1, -1};
}
推荐阅读
- javascript - 笑话:TypeError:replaceAll 不是函数
- java - springboot:实现mysql cdc
- python - 我寻求有关使用 API 的说明
- r - 从 docker 运行时,与 Postgresql 的闪亮应用程序池连接消失
- python-3.x - 计算连续字符串的函数
- nginx - Nginx 入口控制器身份验证不起作用
- javascript - 从反应到表达的错误 404 POST 表单数据
- sql-server - SQL Server 按子句排序问题
- python - 使用 hazmat.primitives 的非对称加密。- ValueError:加密/解密失败
- javascript - 根据数组中的项目数调用命令时出错