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 那么可能currentPhotoPathnull,因为我看不到您如何将其保存为已保存的实例状态Bundle,并且您的进程可能会在相机应用程序处于前景。 它不是空的,我只是没有包含那部分代码。我只包括与我的问题有关的电话。] 【参考方案1】:

尝试将它们保存到内部存储中,因为手机应该会拾取内部存储中的所有照片。

希望对你有帮助!

【讨论】:

以上是关于Android:保存到 getExternalPublicStorageDirectory 并在图库中显示的主要内容,如果未能解决你的问题,请参考以下文章

Android / PHP:将输入数据从android保存到MySQL后显示“数据成功保存”

android - 将数据保存到firebase是用字母键保存的

Android笔记67Android之使用系统中的相机功能(拍照保存照片显示拍摄的照片照片保存到图库等操作)

[android] 保存文件到手机内存

将图像缓冲区保存到android上的文件

Android将文件保存到外部存储