2017-02-09 54 views
0

這是我的代碼我想創建一個應用程序來存儲捕獲的圖片形式的相機,並將其保存在SDcard雖然,圖片保存在手機的內存中,但不是在SD卡中幫我 !保存捕獲的圖像上SDcard Android Studio

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

如果你有通向SD卡的路徑,你可以使用和現在一樣的代碼。但是你很快就會發現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()方法。