【问题标题】:the photo does not appear in the gallery照片没有出现在图库中
【发布时间】:2017-11-10 09:48:40
【问题描述】:

我尝试在我的应用中拍摄并保存照片。 我在清单中为他写了文件提供程序和路径:

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="mypacage.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/path" />
            </provider>

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="my_images"  path="images"/>

</paths>

在我的活动中,我调用片段对话框(cameraOrChoosePhoto Dialog),它有一个按钮,接下来是打开相机的意图和为照片创建文件的其他操作::

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.dialog_camera:
                Uri uri = generateUriPhoto();
                if(uri!=null) {
                    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
                    cameraIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION |
                                                          Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                    getActivity().startActivityForResult(cameraIntent, SubItemDetail.CAMERA_RESULT);
                } else dismiss();
                break;
            case R.id.dialog_choose_photo:
                break;
        }
    }

    private Uri generateUriPhoto() {
        file = createNameFile(); 
        uri = null;
        if (file != null) {
                      String aut = getActivity().getPackageName()+".fileprovider";
                       uri = getUriForFile(getActivity(), aut, file);

                      getActivity().grantUriPermission(getActivity().getPackageName(), uri, 
                                                                              Intent.FLAG_GRANT_READ_URI_PERMISSION |
                                                                                Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        }
        return uri;

    }

    public File getFile() {
        return file;
    }

    public Uri getUri() {  //  onActivityResult
        return uri;
    }

    private File createNameFile() {
        directory = new File(getActivity().getFilesDir(), "images");
        if (!directory.exists()) {
            directory.mkdirs();
        }
        String name = "photo_" + System.currentTimeMillis();
        File file = null;
        try {
            file = File.createTempFile(
                    name,  /* prefix */
                    ".jpg",         /* suffix */
                    directory      /* directory */
            );
        } catch (IOException e) {
            e.printStackTrace();
            dismiss();
        }
        return file;
    }

接下来我的活动:

…………

private Uri uri

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        CameraOrChoosePhotoDialog cameraOrChoosePhotoDialog = (CameraOrChoosePhotoDialog)             getFragmentManager().findFragmentByTag("camera"); 

        uri = cameraOrChoosePhotoDialog.getUri();// get uri from dialogfargment

        if (resultCode == RESULT_OK) {
            if (requestCode == CAMERA_RESULT) {

                 image.setImageURI(uri);
                addPicToGallery(); //  try  to put photo in gallery

                cameraOrChoosePhotoDialog.dismiss();  // close dialog
            }
        }
    }

    private void addPicToGallery() {

        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri)); 
        mediaScanIntent.setData(uri));
         sendBroadcast(mediaScanIntent);


    }

但照片没有出现在图库中

【问题讨论】:

  • 我认为您需要在成功捕获后存储图像,您只是在扫描系统中存在的文件。首先尝试使用 fileOutputStream 压缩并保存位图,然后扫描(sendBroadcast)
  • @Demo 邮件。但在 Android Studio 的 AMD 中,我看到这些创建的文件扩展名为 .jpg。在文件夹 .../file/images/
  • 你能打开那个图片吗??你能看到有效的图像吗??
  • 是的,我可以。我将它与 URI 一起放入我的 ImageView 中。我可以将它复制到我的电脑中。

标签: android android-gallery android-fileprovider


【解决方案1】:

尝试将捕获的文件转换为.jpeg、.png等图片格式,然后存储到设备本地存储或SD卡中。

【讨论】:

  • 但在 Android Studio 的 AMD 中,我看到这些创建的文件扩展名为 .jpg。
【解决方案2】:

更换你的

private void addPicToGallery() {

        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri)); 
        mediaScanIntent.setData(uri));
         sendBroadcast(mediaScanIntent);


    }

private void addPicToGallery() {

            Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri)); 
            mediaScanIntent.setData(Uri.fromFile(file)));
             sendBroadcast(mediaScanIntent);
        }

FileProvider 中的初始 uri 与您从实际文件中获得的 uri 有所不同 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2018-10-20
    相关资源
    最近更新 更多