2015-01-10 4 views
2

Мы можем создать общий выбор для камеры и галереи как тот же, что и WHATS APP EDIT PROFILE .. [link] I want to make a Dialog Screen Like WhatsApp Profile Photo Dialog Screen ... но проблема возникает в onActivityResult() .. мы можем «Невозможно отличить, выбираем ли мы изображение из галереи или Мы снимали изображение с камеры? так как мы можем сделать различие между ними в onActivityResult()? Любые решения? PLZ Помогите мне, если у вас есть!Диалоговый экран Like WhatsApp Профиль Фото Диалог Экран

ответ

2

Как запустить единое намерение для выбора изображений из галереи или камеры или любого приложения, зарегистрированного для просмотра файловой системы.

Вместо того, чтобы создать диалог со списком опций Намерение, гораздо лучше использовать Intent.createChooser для того, чтобы получить доступ к графические иконки и короткие имена различных «Камера», «Галерея» и даже сторонние приложения для браузеров файловой системы, такие как «Astro» и т. д.

В этом разделе описано, как использовать стандартное намерение выбора и добавить дополнительные намерения.

private Uri outputFileUri; 

private void openImageIntent() { 

// Determine Uri of camera image to save. 
final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MyDir" + File.separator); 
root.mkdirs(); 
final String fname = Utils.getUniqueImageFilename(); 
final File sdImageMainDirectory = new File(root, fname); 
outputFileUri = Uri.fromFile(sdImageMainDirectory); 

    // Camera. 
    final List<Intent> cameraIntents = new ArrayList<Intent>(); 
    final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    final PackageManager packageManager = getPackageManager(); 
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0); 
    for(ResolveInfo res : listCam) { 
     final String packageName = res.activityInfo.packageName; 
     final Intent intent = new Intent(captureIntent); 
     intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
     intent.setPackage(packageName); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
     cameraIntents.add(intent); 
    } 

    // Filesystem. 
    final Intent galleryIntent = new Intent(); 
    galleryIntent.setType("image/*"); 
    galleryIntent.setAction(Intent.ACTION_GET_CONTENT); 

    // Chooser of filesystem options. 
    final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source"); 

    // Add the camera options. 
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{})); 

    startActivityForResult(chooserIntent, YOUR_SELECT_PICTURE_REQUEST_CODE); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if(resultCode == RESULT_OK) 
    { 
     if(requestCode == YOUR_SELECT_PICTURE_REQUEST_CODE) 
     { 
      final boolean isCamera; 
      if(data == null) 
      { 
       isCamera = true; 
      } 
      else 
      { 
       final String action = data.getAction(); 
       if(action == null) 
       { 
        isCamera = false; 
       } 
       else 
       { 
        isCamera = action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       } 
      } 

      Uri selectedImageUri; 
      if(isCamera) 
      { 
       selectedImageUri = outputFileUri; 
      } 
      else 
      { 
       selectedImageUri = data == null ? null : data.getData(); 
      } 
     } 
    } 
} 

Или полный пример образец проверить this

+0

я хочу такой же, как WhatsApp редактирования профиля, где есть общая цель Chooser как для камеры и Gallary !! –

+0

проверьте выше код –

+0

Thanx! Его сработал чувак !! после jst, заменив ACTION_GET_CONTENT на ACTION_PIC .. для галереи (не нужна документация) .. plz +1 к моему вопросу :) –

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