2016-10-24 4 views
0

イメージを取った後、別のフォルダにイメージを保存したい。画像を撮ることはできますが、SDカードのルートフォルダだけを保存することができます。 Environment.getExternalStorageDirectory().getAbsolutePath()私に /storage/emulated/0パスを与える。私が望むのは、edit.getText().toString()から来る名前の別のフォルダを作成することです。ありがとうございます。将来的には、ここを見てみましょう人のためにandroid - 画像をカスタムフォルダに保存するにはどうすればよいですか?

private void startCapture() { 

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    if (cameraIntent.resolveActivity(getPackageManager()) != null) { 

     File photoFile = null; 
     try { 
      photoFile = CreateImageFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     if(photoFile != null) 
     { 
      cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); 
      startActivityForResult(cameraIntent, CAMERA_CAPTURE); 
     } 
    } 
} 

private File CreateImageFile() throws IOException 
{ 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String imageFileName = timeStamp + ".jpg"; 


    File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+edit.getText().toString()); 
    if (!f.exists()) { 
     f.mkdirs(); 
    } else { 
     f = new File(Environment.getExternalStorageDirectory(), edit.getText().toString() + "(2)"); 
     f.mkdirs(); 
    } 

    File storageDirectory = new File(new File("/sdcard/"+edit.getText().toString),imageFileName); 

    return storageDirectory; 
} 

@Override 
public void onActivityResult(final int requestCode, int resultCode, Intent data) { 

    switch(requestCode) 
    { 
     case CAMERA_CAPTURE: 
      if(resultCode == RESULT_OK) 
      { 
       Toast t = Toast.makeText(klasorAdiActivity.this,"Photo taken",Toast.LENGTH_SHORT); 
       t.show(); 
       startCapture(); 
      } 
      break; 
    } 
} 

EDIT

。プログラムによるユーザー許可の要求をスキップしないでください。ここで

を使用すると、記憶許可取得方法は次のとおりです。

まず定数

に定義を
private static String TAG = "StoragePermission"; 
private static final int REQUEST_WRITE_STORAGE = 112; 
あなたは許可が既に付与されているかどうかをチェックし、ユーザーの許可を求めていない場合でしょう

セカンド許可方法

private void Permission() { 
if (ContextCompat.checkSelfPermission(this, 
     Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
    Log.i(TAG, "Permission to record denied"); 

    if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
      Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 


    } else { 
     ActivityCompat.requestPermissions(this, 
      new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
      REQUEST_WRITE_STORAGE); 
    } 
} 
} 

第3許可結果

@Override 
public void onRequestPermissionsResult(int requestCode, 
            String permissions[], int[] grantResults)     { 
switch (requestCode) { 
    case REQUEST_WRITE_STORAGE: { 

     if (grantResults.length == 0 
       || grantResults[0] != 
       PackageManager.PERMISSION_GRANTED) { 

      Log.i(TAG, "Permission denied"); 

     } else { 

      Log.i(TAG, "Permission granted"); 

     } 
     return; 
    } 
} 
} 
+1

**パスをハードコーディング決して**。 '/ sdcard /'のようなものを参照するコードを見るたびに、そのコードの作者は自分が何をしているのか分かりません。それを超えて、あなたは 'Environment.getExternalStorageDirectory()'のディレクトリを作成しているように見えます。それを無視し、ハードコードされた '/ sdcard /'を参照する 'storageDirectory'値を返します。 'File storageDirectory = new File(f、imageFileName);'を試して、あなたの運が良ければ見てください。 – CommonsWare

+0

@CommonsWareはこれを一瞬前に試してみたが、何もしなかった。私は 'W/System.err:原因:android.system.ErrnoException:オープンに失敗しました:ENOENT(そのようなファイルやディレクトリはありません) ' – Erayzer

答えて

1
+0

私はsdcardに画像を取り込んで保存することができます。私の問題は新しいフォルダを作成してそこに保存することができないことです。 – Erayzer

+0

これを見てみてくださいhttp://stackoverflow.com/questions/17794974/create-folder-in-android –

1

あなたの質問に似ていると思う。..

private Uri imageToUploadUri; 

    private File CreateImageFile() throws IOException 
    { 
     File defaultFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+APP_NAME+"/"+edit.getText().toString()); 
     if (!defaultFile.exists()) 
      defaultFile.mkdirs(); 

     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = timeStamp + ".jpg"; 
     File file = new File(defaultFile,imageFileName); 

     //renaming file if exist 
     int i = 2; 
     while (file.exists()){ 
      file = new File(defaultFile, timeStamp + "(" + i + ")" + ".jpg"); 
      i++; 
     } 

     return file; 
    } 



    private void captureCameraImage() { 
      Intent chooserIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      chooserIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
      //stored the image and get the URI 
      imageToUploadUri = Uri.fromFile(CreateImageFile()); 
      startActivityForResult(chooserIntent, CAMERA_PHOTO); 
    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 

      if (requestCode == CAMERA_PHOTO && resultCode == Activity.RESULT_OK) { 
       Toast t = Toast.makeText(klasorAdiActivity.this,"Photo taken",Toast.LENGTH_SHORT); 
       t.show(); 
       if(imageToUploadUri != null){ 
        Uri selectedImage = imageToUploadUri; 
        // do what ever you want with this image  
       } 
      } 
    } 
+0

ありがとうございます。すべて正しいと私はアプリの自体からエラーを取得しないように見えます。私はギャラリーエラーを取得します。私はなぜそれが起こることができないのかわからない – Erayzer

+0

私は私の答えを編集しました。 – ZeroOne

関連する問題