2015-01-14 2 views
0

Я пытаюсь дать пользователю возможность выбрать изображение из памяти телефона или взять его с помощью приложения камеры телефона, а затем отобразить это изображение в изображении. С помощью this и this вопрос Я могу отобразить изображение, когда оно выбрано из хранилища. Однако, если я решил сделать снимок с камерой, хотя я не получаю ошибку, изображение не отображается в 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); 
} 

EDIT

С @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" /> 

В случае возникновения вопросов, пожалуйста, дайте мне знать. Благодарю.

Смежные вопросы