首页 > 解决方案 > 如何在 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

标签: javaandroidfile

解决方案


如果你想 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};
    } 

推荐阅读