Android:保存到 getExternalPublicStorageDirectory 并在图库中显示
Posted
技术标签:
【中文标题】Android:保存到 getExternalPublicStorageDirectory 并在图库中显示【英文标题】:Android: saving to getExternalPublicStorageDirectory and displaying in gallery 【发布时间】:2018-02-07 12:34:18 【问题描述】:所以我一直在关注 android 教程 Capture (with camera intent) Simply
在教程中,它明确说明在(创建图像“文件”)保存图片时使用 getExternalStoragePublicDirectory 调用,但在他们的示例中,它们使用 getExternalStorageDirectory。基本上它是一个“照我说的不照我做”的例子。
所以我尝试使用 getExternalStoragePublicDirectory 出现各种错误。我最终让它工作,我可以通过 ADB shell 看到这些文件确实存在。为了我的一生,我不能让他们出现在画廊里。使用媒体扫描仪连接来扫描文件似乎并不奏效。有谁知道如何让文件显示在画廊中?
代码 sn-ps:
private File createImageFile() throws IOException // Create an image file name
String timeStamp = new
SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File pictureDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
// if the file does not exist, then create the file.
if(!pictureDir.exists())
pictureDir.mkdirs();
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
pictureDir /* directory */
);
boolean exists = image.exists();
this.currentPhotoPath = image.getAbsolutePath();
// Save a file: path for use with ACTION_VIEW intents
return image;
private void dispatchTakePictureIntent()
verifyStoragePermissions(this);
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// i believe this is checking if the activity exists.
if(takePictureIntent.resolveActivity(getPackageManager()) != null)
File imageFile = null;
try
imageFile = createImageFile();
catch (IOException e)
Log.i("sf", e.getMessage());
Log.i("sf",e.getCause().getMessage());
if(imageFile != null)
imageFile.toURI();
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageFile.toURI());
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
private void addGalleryPic() throws IOException
Intent mediaScanIntent = new
Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(this.currentPhotoPath);
if(f.exists())
Log.i("sdf", f.getAbsolutePath() + " exists");
MediaScannerConnection.scanFile(this,
new String[]currentPhotoPath, null,
new MediaScannerConnection.OnScanCompletedListener()
public void onScanCompleted(String path, Uri uri)
String p = uri.getPath();
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
);
【问题讨论】:
“使用媒体扫描仪连接来扫描文件似乎不能解决问题”——它应该。但是,我看不到你在哪里打电话给addGalleryPic()
。
我没有包含它,因为假设我在 onActivityResult 覆盖中这样做了。 @CommonsWare
那么可能currentPhotoPath
是null
,因为我看不到您如何将其保存为已保存的实例状态Bundle
,并且您的进程可能会在相机应用程序处于前景。
它不是空的,我只是没有包含那部分代码。我只包括与我的问题有关的电话。]
【参考方案1】:
尝试将它们保存到内部存储中,因为手机应该会拾取内部存储中的所有照片。
希望对你有帮助!
【讨论】:
以上是关于Android:保存到 getExternalPublicStorageDirectory 并在图库中显示的主要内容,如果未能解决你的问题,请参考以下文章
Android / PHP:将输入数据从android保存到MySQL后显示“数据成功保存”
android - 将数据保存到firebase是用字母键保存的