2017-02-09 13 views
0

これは私のコードです。撮影した画像を保存してSDカードに保存したいのですが、画像は携帯電話のメモリに保存されますが、SDカードには保存されません助けて !SDカードに保存された画像を保存するAndroidスタジオ

private Button takePictureButton; 
private ImageView imageView; 
private Uri file; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    takePictureButton = (Button) findViewById(R.id.button_image); 
    imageView = (ImageView) findViewById(R.id.imageview); 

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
     takePictureButton.setEnabled(false); 
     ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0); 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == 0) { 
     if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED 
       && grantResults[1] == PackageManager.PERMISSION_GRANTED) { 
      takePictureButton.setEnabled(true); 
     } 
    } 
} 

public void takePicture(View view) { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    file = Uri.fromFile(getOutputMediaFile()); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, file); 

    startActivityForResult(intent, 100); 
} 

private static File getOutputMediaFile(){ 




    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
      Environment.DIRECTORY_PICTURES), "CameraDemo"); 

    if (!mediaStorageDir.exists()){ 
     if (!mediaStorageDir.mkdirs()){ 
      Log.d("CameraDemo", "failed to create directory"); 
      return null; 
     } 
    } 




    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    return new File(mediaStorageDir.getPath() + File.separator + 
      "IMG_"+ timeStamp + ".jpg"); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 100) { 
     if (resultCode == RESULT_OK) { 
      imageView.setImageURI(file); 
     } 
    } 
} 

}

+0

だから、あなたが知りたいのは、SDカードへのパスを決める方法だけです。すべてのコードを投稿する必要はありません。 – greenapps

+0

sdcardのパスがある場合は、今までと同じコードを使用できます。しかし、あなたはすぐにAndroidがあなたにもうSDカードに書き込むことを許可していないことを発見するでしょう。今日あなたはそれを読むことしかできません。既にmkdirs()は失敗します。 – greenapps

答えて

0

方法を、次の試してみてください。

private void saveImageToExternalStorage(String fileName, Bitmap finalBitmap) { 

    String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString(); 
    File myPicDirectory = new File(root + "/my_pics"); 
    myPicDirectory.mkdirs(); 

    File file = new File(myDir, fileName); 
    if (file.exists()) 
    file.delete(); 
    try { 
     FileOutputStream out = new FileOutputStream(file); 
     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); // 90 refers to quality of image 
     out.flush(); 
     out.close(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

また、マニフェストファイルにも権限を追加することを忘れないでください。

+0

OPは既に外部ストレージを使用していました。これはSDカードではありません。あなたのコードは何も新しいものをもたらしません。 – greenapps

0

​​は、常にプライマリ共有/外部ディレクトリへのパスを提供します。あなたはそれについての詳細を見つけることができますhere

プライマリ共有ディレクトリは、デバイスの製造元によって、ユーザまたは外部のsdcardディレクトリに共有される内部ディレクトリにすることができます。

APIレベル19より上のデバイスで共有/外部ディレクトリのリストを取得するには、コンテキストクラスでgetExternalFilesDirs()メソッドを使用できますが、

関連する問題