私の要件は、コンテンツ プロバイダーを介して別のアプリから 1 つのアプリのアセット ファイルを開くことです (そのファイルを 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 デバイスで別の方法で開くことができます。
誰でも私に指摘できますか、どのシナリオで、この例外が発生しますか?
前もって感謝します。