如何从android上的外部存储器中将.gif文件作为InputStream打开

Raf*_*fiq 3 java android android-emulator

我试图从外部存储(图片目录)加载.gif图像,但我使用以下代码获取'文件未找到异常'.

    InputStream mInputStream = null;
    AssetManager assetManager = getResources().getAssets();
    try {
        mInputStream = assetManager.open(getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath().concat("/01.gif"));          

    } catch (IOException e) {           
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

我也测试过使用手动路径,但得到了相同的异常

mInputStream = assetManager.open("file:///mnt/sdcard/Android/data/com.shurjo.downloader/files/Pictures/01.gif");
Run Code Online (Sandbox Code Playgroud)

在清单文件中有SD卡的读/写权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

请帮助我如何从外部存储打开文件作为InputStream.提前致谢.

注意:我在模拟器上测试了它,并且在Pictures文件夹下有一个文件01.gif(请参见手册路径).我可以创建目录并将文件放在这些目录中,但无法通过Input Stream访问这些文件.

Raj*_*esh 10

AssetManager用于访问应用程序包的assets文件夹中的文件.它不能用于访问外部存储中的文件.

您可以使用以下内容:

final String TAG = "MyAppTag";

File picturesDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File imageFile = null;
final int readLimit = 16 * 1024;
if(picturesDir != null){
    imageFile = new File(picturesDir, "01.gif");
} else {
    Log.w(TAG, "DIRECTORY_PICTURES is not available!");
}
if(imageFile != null){
    mInputStream =  new BufferedInputStream(new FileInputStream(imageFile), readLimit);
    mInputStream.mark(readLimit);
} else {
    Log.w(TAG, "GIF image is not available!");
}
Run Code Online (Sandbox Code Playgroud)

另请查看可用的示例代码 getExternalFilesDir

更新自:这个