2014-07-15 1 views
2

일부 기기에서 발생하는 내 앱에서 최근에 known bug을 수정했습니다. 사용자가 내 앱에서 시작한 의도에서 사진을 찍을 때 onActivityResultUri uri = intent.getData();을 반환합니다. 나는 그걸 바로 잡을 수 있었다. suggested manner. 그러나 사용자가 자신의 휴대 전화 사진 갤러리에서 사진을 선택해야 할 때 똑같은 문제가 발생한다. 동일 intent.getData() == null.갤러리 intent.getData()는 onActivityResult에서 null을 반환합니다.

의도를 시작 :

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("image/*"); 
startActivityForResult(Intent.createChooser(intent, "Select Picture"),  
R.id.SELECT_IMAGE_ACTIVITY_REQUEST_CODE); 

하여 onActivityResult :

Uri selectedImage = data.getData(); 
String[] filePathColumn = 
    {MediaStore.Images.Media.DATA}; 
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
cursor.moveToFirst(); 
int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
String filePath = cursor.getString(columnIndex); 
cursor.close(); 
dataHasChanged(ACTION_PICTURE, filePath); 

PS : 나는 "갤러리"를 사용하는 경우에만 나는 intent.getData()를 얻을 수 아래에 표시하지만 같은 내가 의도를 시작하면 이상하게도 내 samsung s4에 응용 프로그램이 아니라 GooglePhotos 응용 프로그램.

Intent pickImageIntent = new Intent(
    Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
if (pickImageIntent.resolveActivity(getPackageManager()) != null) 
    startActivityForResult(pickImageIntent, R.id.SELECT_IMAGE_ACTIVITY_REQUEST_CODE); 

진행 방법이 확실하지 않습니다. 나는 안드로이드 전체의 의도가 때때로 혼란 스럽다는 것을 안다.

답변

1

나는 당신의 참조를 위해 당신에게 코드를주는거야 :

사용이 코드를 사용자의 응용 프로그램에서 그림을 클릭 한 후 : 코드 아래

Intent intent = new Intent(); 
    // call android default gallery 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    try { 
    intent.putExtra("return-data", true); 
    startActivityForResult(Intent.createChooser(intent, 
    "Complete action using"), PICK_FROM_GALLERY); 

    } catch (ActivityNotFoundException e) { 
    // Do nothing for now 
    } 

()는 당신의 onActivityResult를에있을 것입니다 :

 if (requestCode == PICK_FROM_GALLERY) { 
      if (resultCode != RESULT_CANCELED) { 
       Bundle extras2 = data.getExtras(); 
       if (extras2 != null) { 
       photo = extras2.getParcelable("data"); 
       bitmap = photo; 
       profile_imageView.setImageBitmap(photo); 
       new ImageUploadTask().execute(); 
       } 
      } 
     } 

희망이 있으면 문제가 해결 될 것입니다.

+0

에 IMG을 설정하는 하나 개의 이미지 뷰가 ...이 있다면이 위대한 작품을 내가 하나 개 이상의 이미지 뷰에 대한 파일을로드 같은 논리를 사용하려면 어떻게? onActivityResult의 코드는 사진을 설정할 ImageView를 어떻게 알 수 있습니까? 어떤 팁? –

+0

신경 쓰지 마세요. 나는 그것을 알아! –

0
static final int REQUEST_GALLERY_IMAGE = 14; 

---------- 
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
     photoPickerIntent.setType("image/*"); 
     startActivityForResult(photoPickerIntent, REQUEST_GALLERY_IMAGE); 


protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_GALLERY_IMAGE && resultCode == RESULT_OK) { 
      try { 
       final Uri imageUri = data.getData(); 
       InputStream imageStream = getContentResolver().openInputStream(imageUri); 
       final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream); 
       imagePreview.setImageBitmap(selectedImage); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
     } 
} 
+1

적어도 이해를 돕기 위해 코드를 약간 설명하십시오. – secretgenes