无法在Gallery,外部存储中创建文件夹

时间:2018-03-07 16:06:20

标签: java android android-camera gallery photo

我是Android的新手,我已按照本教程https://developer.android.com/training/camera/photobasics.html进行操作,但我无法在/storage/emulated/0/Pictures中创建文件夹。

private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getPublicAlbumStorageDir("FileName");
    if (storageDir ==null){
        Toast.makeText(this, "Sorry no folder available", Toast.LENGTH_LONG).show();
        return storageDir;
    }
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir /* directory */
    );
    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = image.getAbsolutePath();
    return image;
}

有人告诉我使用getPublicAlbumStorageDir() https://developer.android.com/training/data-storage/files.html#java代替getExternalFilesDir(Environment.DIRECTORY_PICTURES)

public File getPublicAlbumStorageDir(String albumName) throws IOException {
    // Get the directory for the user's public pictures directory.
    File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName);
    Log.i("File", file.getAbsolutePath());
    if (!file.exists()) {
        Log.e("Error", file.getAbsolutePath());
        file.mkdirs();
        if(!file.exists()){
            Log.e("Error22", file.getAbsolutePath());
        }
        else{
            Log.i("In", "you are in");
            return file;
        }
        return null;
    }
    return file;
}

以下是我的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我试图找到更多有关此问题的信息,唯一有效的项目是site,但有些操作已经过时了。

我用于测试Android 8.0.0Android 6.0.0

正在运作 如果您想在图库中创建一个文件夹,请按以下步骤操作:

  1. 转到https://developer.android.com/training/camera/photobasics.html#TaskPath并将权限复制到AndroidManifest.xml,在FileProvider标记内添加<application>。然后在res或resource中创建一个名为xml的文件夹,在里面创建一个名为file_paths的xml文件,在文件副本中FileProvider下的内容,但将path更改为path="."
      

    (如果你真的使用它,别忘了询问用户的权限。)

  2. 在上面的同一页面中,您会找到private void dispatchTakePictureIntent(),复制该内容并static final int REQUEST_TAKE_PHOTO = 1。为了工作, dispatchTakePictureIntent()是您需要打电话的第一件事。
  3. 之后,创建String mCurrentPath并从上方复制Private File createImageFile()
  4. 接下来,复制此解释之上的public File getPublicAlbumStorageDir(String albumName)
  5. 如果您运行它将显示相机,您可以拒绝或接受您拍摄的照片。但是,您仍然需要添加更多代码。

    String REQUEST_TAKE_PHOTO = 2; @Override protected void onActivity(int requestCode, int requestCode, Intent data){ if(requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK){ //Show ImageView here if you want galleryAddPic(); } super.onActivityResult(requestCode, resultCode, data); }

  6. https://developer.android.com/training/camera/photobasics.html#TaskGallery重复private void galleryAddPic()中如果您想要显示拍摄的图像,请添加以下内容:

    bitmap = BitmapFactory.decodeFile(f.getAbsolutePath()); imageView.setImageBitmap(bitmap);

  7. 就像这样,你的图像应该在你定义的FolderName中。

    我决定制作这个小教程,因为我找不到这个问题的答案,在Android网站上也没有很好的解释。

    非常感谢greenapps!我真的很感激!

0 个答案:

没有答案