2014-02-22 155 views
1

當用戶使用相機拍攝照片時,我希望圖像顯示在ImageView中,並且我想將Uri保存到在線數據庫中。我聽說保存圖片的Uri比保存路徑要好。獲取相機拍攝的圖片

所以這是我如何啓動相機:

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getFile(getActivity()))); 
String a = String.valueOf(Uri.fromFile(getFile(getActivity()))); 
intent.putExtra("photo_uri", a); 
startActivityForResult(intent, PICK_FROM_CAMERA); 

其中

private File getFile(Context context){ 
    File sdCard = Environment.getExternalStorageDirectory(); 
    File directory = new File (sdCard.getAbsolutePath() + "/Myapp"); 
    if (!directory.exists()) { 
     directory.mkdirs(); 
    } 
    String filename = "bl" + System.currentTimeMillis() + ".jpg"; 
    File newFile = new File(directory, filename); 

    return newFile; 
} 

在onActivityResult:

Bundle extras = data.getExtras(); 
String photo_uri = extras.getString("photo_uri"); //null 

這始終是零。順便說一句,在發送意圖之前,Uri看起來像file:// ...而不是content://這是從圖庫中打開圖像時的URI。我不知道這是否是一個問題。

此外,我應該保存路徑而不是Uri到數據庫?我讀到Uri可能會在某些手機或Android版本中變得複雜。當我讓用戶從圖庫中選擇圖像時,我將Uri保存到數據庫中,所以我認爲最好的辦法就是在這種情況下保存Uri。

我嘗試了許多變化,但每次我試圖傳遞一個變量的意圖時...

回答

4

我得到空開始的意圖後:

Intent intentPicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

startActivityForResult(intentPicture,PICK_FROM_CAMERA); 

onActivityResult

case PICK_FROM_CAMERA: 

    Uri selectedImageUri = data.getData(); 
    InputStream imageStream = null; 
    try { 
     imageStream = getContentResolver().openInputStream(selectedImageUri); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream); 
break; 

就是這樣。