【问题标题】:Copy the gallery photo into my app's folder将图库照片复制到我的应用程序的文件夹中
【发布时间】:2020-04-08 07:57:26
【问题描述】:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
//activity A intent
Intent intent = new Intent(Intent.ACTION_PICK,null);
intent.setType("image/*");
intent.putExtra("return-data", true);
startActivityForResult(intent,Constant.ACTION.LOAD_GALLERY_ACTION);

//this is onActicityResult function
case Constant.ACTION.LOAD_GALLERY_ACTION:
            Uri uri = data.getData();
            if(mImage.size()<maxAddPic) {
                mImage.add(copyGalleryPic(uri));
                adapter.notifyDataSetChanged();
            }
            break;

//to copy the gallery photo,return the new file uri.
private Uri copyGalleryPic(Uri uri) {

    String filePath = Environment.getExternalStorageDirectory() + "/images/"+"diary"+System.currentTimeMillis()+".jpg";
    File outputFile = new File(filePath);
    if (!outputFile.getParentFile().exists()) {
        outputFile.getParentFile().mkdirs();
    }
    Bitmap bitmap;
    try (FileOutputStream fos = new FileOutputStream(outputFile)) {

        bitmap=MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
        bitmap.compress(Bitmap.CompressFormat.JPEG,100,fos);
    } catch (IOException e) {
        // ... handle IO exception
    }
    Uri newUri = FileProvider.getUriForFile(CreateDiaryActivity.this,"com.example.diary.cr",outputFile);
    return newUri;
}

但有一些错误

intent 返回 uri

“content://com.google.android.apps.photos.contentprovider/-1/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F29/ORIGINAL/NONE/41130179”

但调试信息显示代码

"位图=MediaStore.Images.Media.getBitmap(getContentResolver(), uri);" 错误:java.io.FileNotFoundException:打开失败:ENOENT (没有这样的文件或目录)

请帮帮我!爱你们!

我的英语不好。请使用简单的词。谢谢!

【问题讨论】:

  • 您是否申请了运行时权限?
  • 谢谢。我找到了Android Studio可能有一些错误的答案。

标签: java android


【解决方案1】:
  • 您使用的是哪个 android 版本和哪个 sdk 版本?我有一个 android-2.2 应用程序在 android 7 下无法接收 Intent 权限,请参阅:https://github.com/k3b/intent-intercept/issues/4。我认为使用更新的 android-sdk 重新编译可能会有所帮助。
  • 如果您使用 InputStream 通过getContentResolver().openInputStream(data.getData(uri)) 读取选取的图像,您是否编程工作。
  • 由于 android-4.4 ACTION_PICK 被 ACTION_OPEN_DOCUMENT 取代。我最近使用 ACTION_OPEN_DOCUMENT 和 openInputStream 的应用按预期工作

【讨论】:

  • 谢谢。发布问题后,我没有更改任何代码。但现在这些代码运行良好。我不知道发生了什么。
猜你喜欢
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
相关资源
最近更新 更多