android - 插入内部存储后如何使图库中的图像可见?
问题描述
我刚刚在我的内部存储中插入了一些图片,但它们在画廊中不可见。
有人可以解释我为什么吗?
这是我的代码:
File photosFolder = new File(getContext().getExternalFilesDir(null),"myPictures");
photosFolder.mkdirs();
String[] pictures = null;
try {
pictures = assetManager.list("photos");
} catch (IOException e) {
Log.e("tag", "Failed to get asset file list.", e);
}
for(String filename : pictures) {
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open("photos/"+filename);
File outFile = new File(photosFolder, filename);
out = new FileOutputStream(outFile);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
MediaScannerConnection.scanFile(getContext(), new String[]{outFile.toString()}, null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
Log.i("External Storage", "Scanned"+ path +":");
Log.i("External Storage", "uri "+uri);
}
});
} catch(IOException e) {
Log.e("tag", "Failed to copy asset file: " + filename, e);
}
}
我对此没有任何结果,有什么帮助吗?
解决方案
试试这个:
File photosFolder = null;
if(Build.VERSION_CODES.R>Build.VERSION.SDK_INT) {
photosFolder = new File(Environment.getExternalStorageDirectory(), "myPictures");//this will create a seperate directory in your external storage if you are using android 10 device
}
else
{
photosFolder=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath(),"myPictures");//though depreciated it still works.In android 11 you can create your directory inside public directories using this method.
}
if (!file.exists()) {
file.mkdir();
}
String[] pictures = null;
try {
pictures = assetManager.list("photos");
} catch (IOException e) {
Log.e("tag", "Failed to get asset file list.", e);
}
for(String filename : pictures) {
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open("photos/"+filename);
File outFile = new File(photosFolder, filename);
out = new FileOutputStream(outFile);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
MediaScannerConnection.scanFile(this,
new String[] { outFile.toString() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
} catch(IOException e) {
Log.e("tag", "Failed to copy asset file: " + filename, e);
}
}
}
您可以在此处查看文档。
推荐阅读
- laravel - 将模型传递给邮件视图
- python - 我在我的项目中创建了虚拟环境,它通过 git bash 进行 git clone。但是我的点子不起作用,它坏了
- mysql - 将一个表中的 n 行更新为另一个表中的 n 行(无外键)
- python - 在 python 中将 list[str] 转换为 list[int]
- javascript - 如何使用ajax将异步值从html传递到flask?
- python - Buildozer 无法编译 - 失败
- c# - UWP App proc.Start() 无法找到指定的文件 C#
- python - 在 Python 中抓取带有登录和重定向的页面
- text-files - 无法从窗口命令提示符将程序的输出保存在 txt 文件中
- excel - 不正确的参数(VBA 脚本)