我的要求是通过内容提供程序从另一个应用程序打开一个应用程序的资产文件。(我正在使用 ContentProvider 实现公开该文件)
我可以打开几个文件并阅读,但是在打开一些文件时我遇到了异常。请找到打开资产文件的实现。
@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 设备中以其他方式打开同一个文件。
谁能指出我,在什么情况下,我们会得到这个异常。
提前致谢。