gpt4 book ai didi

java - 在 Content Provider 的帮助下打开 Assets 文件时出现问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:20:49 27 4
gpt4 key购买 nike

我的要求是通过内容提供者从另一个应用程序打开一个应用程序的 Assets 文件。(我正在使用 ContentProvider 实现公开该文件)

我可以打开几个文件并阅读,但在打开一些文件时出现异常。请找到打开 Assets 文件的实现。

@Override
public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {
AssetManager am = getContext().getAssets();
String file_name = uri.getLastPathSegment();
if(file_name == null)
throw new FileNotFoundException();
AssetFileDescriptor afd = null;
try {
afd = am.openFd(file_name);
} catch (IOException e) {
e.printStackTrace();
}
return afd;//super.openAssetFile(uri, mode);
}

有时,am.openFd(file_name); 会抛出一个异常,表示,

java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed
at android.content.res.AssetManager.openAssetFd(Native Method)
at android.content.res.AssetManager.openFd(AssetManager.java:329)
at com.pineone.swfinstaller.SwfProvider.openAssetFile(SwfProvider.java:25)
at android.content.ContentProvider$Transport.openAssetFile(ContentProvider.java:218)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:234)
at android.os.Binder.execTransact(Binder.java:288)
at dalvik.system.NativeStart.run(Native Method)

但是,我可以通过其他方式在我的 PC 甚至 Android 设备中打开同一个文件。

谁能指出我,在什么情况下,我们会得到这个异常。

提前致谢。

最佳答案

Android 会尝试压缩所有 Assets ,除非它无用,例如 *.mp3 文件。我不知道是否有不压缩的文件类型的完整列表,但如果您只是将文件重命名为 .mp3 应该没问题(是否压缩的决定仅基于扩展名)

一点谷歌搜索显示:

http://osdir.com/ml/android-ndk/2010-04/msg00086.html

If you have sufficient control over the build process, you can use the "-0" flag with zip or aapt to add the assets.

-0  specifies an additional extension for which such files will not
be stored compressed in the .apk. An empty string means to not
compress any files at all.

aapt 位于您的

android-sdk\platforms\android-VERSION\tools

目录

来自上面引用的链接:

static const char* kNoCompressExt[] = {
".jpg", ".jpeg", ".png", ".gif",
".wav", ".mp2", ".mp3", ".ogg", ".aac",
".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet",
".rtttl", ".imy", ".xmf", ".mp4", ".m4a",
".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2",
".amr", ".awb", ".wma", ".wmv"
};

关于java - 在 Content Provider 的帮助下打开 Assets 文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3177026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com