2015-01-14 95 views
0

我試圖讓用戶選擇從手機存儲中選擇圖像,或者用手機的相機應用程序選擇一個圖像,然後在imageView中顯示該圖像。在thisthis問題的幫助下,我可以在存儲器中選擇圖像時顯示圖像。但是,如果我選擇使用相機拍攝照片,雖然我沒有收到錯誤,但圖像不會顯示在imageView中。如何顯示用戶剛用相機拍攝的圖像

的選擇畫面的功能是這樣的:

public void choosePic(View view) { 
    Intent pickIntent = new Intent(); 
    pickIntent.setType("image/*"); 
    pickIntent.setAction(Intent.ACTION_GET_CONTENT); 

    Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    String pickTitle = "Select or take a new Picture"; // Or get from strings.xml 
    Intent chooserIntent = Intent.createChooser(pickIntent, pickTitle); 
    chooserIntent.putExtra 
    (
     Intent.EXTRA_INITIAL_INTENTS, 
     new Intent[] { takePhotoIntent } 
    ); 

    startActivityForResult(chooserIntent, SELECT_PICTURE); 
} 

之後,它是由

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == PICK_IMAGE && data != null && data.getData() != null) { 
     Uri _uri = data.getData(); 

     //User had pick an image. 
     Cursor cursor = getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null); 
     cursor.moveToFirst(); 

     image = (ImageView) findViewById(R.id.imageView); 
     image.setImageURI(_uri); 
     cursor.close(); 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

編輯

處理隨着@Murtaza侯賽因的幫助,我能夠找到一個工作解決方案:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.i("requestCode",""+requestCode); 
    if(requestCode == PICK_IMAGE && resultCode==RESULT_OK && data != null && data.getData() != null) { 
     Uri _uri = data.getData(); 

     //User had pick an image. 
     Cursor cursor = getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null); 
     cursor.moveToFirst(); 

     image = (ImageView) findViewById(R.id.imageView); 
     image.setImageURI(_uri); 
     cursor.close(); 
    } 
    else if(requestCode== PICK_IMAGE && resultCode==RESULT_OK && data.getData() == null){ 

     Bundle extras = data.getExtras(); 
     Bitmap thePic = extras.getParcelable("data"); 


     image =(ImageView) findViewById(R.id.imageView); 
     image.setImageBitmap(thePic); 

    } 

    super.onActivityResult(requestCode, resultCode, data); 
} 

回答

0

您需要在onActivityResult()

if(requestCode==0 && resultCode==RESULT_OK){ 

    Bundle extras = data.getExtras(); 
    Bitmap thePic = extras.getParcelable("data"); 


    image =(ImageView) findViewById(R.id.imageView); 
    image.setImageBitmap(thePic); 

} 
+0

不幸的是照片仍然沒有顯示出來。 – Axel

+0

添加您的更新代碼 –

+0

您確定,requestCode == 0 && resultCode == RESULT_OK正確嗎?看起來這將永遠不會是真的。 – Axel

0

添加代碼爲它在你的活動時,從攝像機捕獲圖像。寫下面的代碼。

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"/imageLarge"+System.currentTimeMillis()+".jpg")); 
       intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri); 

       try { 
        intent.putExtra("return-data", true); 
        startActivityForResult(intent, 111); 
       } catch (ActivityNotFoundException e) { 
        e.printStackTrace(); 
       } 

在onActivityResult()寫如下的代碼..

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

       if(resultCode == RESULT_OK) 
       { 
        Log.v("","After camera capture path is --> "+mImageCaptureUri.toString().substring(8));   
        Bitmap bitmap=BitmapFactory.decodeFile(mImageCaptureUri.toString().substring(8)); 
image.setImageBitmap(bitmap); 

       } 
       else 
       { 

       } 
    } 
    } 

不要忘記添加一個許可。

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

如有任何疑問,請告訴我。謝謝。

相關問題