2016-03-30 2 views
1

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

private void showFileChooser() { 
    Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(takePicture, 0); 
    Intent pickPhoto = new Intent(Intent.ACTION_PICK, 
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(pickPhoto , 1); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
    switch(requestCode) { 
     case 0: 
      if(resultCode == RESULT_OK){ 
       Uri selectedImage = imageReturnedIntent.getData(); 
       imageView.setImageURI(selectedImage); 
      } 

      break; 
     case 1: 
      if(resultCode == RESULT_OK){ 
       Uri selectedImage = imageReturnedIntent.getData(); 
       imageView.setImageURI(selectedImage); 
      } 
      break; 
    } 
} 

Результат: Если я выберу из галереи, программа просмотра изображений увидит, что она также работает, если я выбираю фотосъемку с камеры. Проблема заключается в том, что в моем методе showFileChooser() все мои намерения запускаются в одно и то же время, поэтому, когда я выбираю из галереи, камера все еще работает. Я выбираю камеру, открывается галерея. Я думаю, что я должен реализовать свой код в режиме режима коммутатора, но я не понимаю, как это сделать. Пожалуйста, помогите решить мою проблему с новичком.

+0

Вы должны спросить пользователя, где выбрать образ. –

+0

Да, это моя цель, но все эти две функции работают в одно и то же время –

+0

Возможный дубликат [Диалог для выбора изображения из галереи или с камеры] (http://stackoverflow.com/questions/10165302/dialog-to-pick -image-from-gallery-or-from-camera) –

ответ

1

Вы должны сначала решить, как то, что действие, которое вы хотите выполнить, например, следующим образом

public class PicModeSelectDialogFragment extends DialogFragment { 

     private String[] picMode = {"Camera", "Gallery"}; 

     private IPicModeSelectListener iPicModeSelectListener; 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
      builder.setItems(picMode, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        if (iPicModeSelectListener != null) 
         iPicModeSelectListener.onPicModeSelected(Constants.PicModes.values()[which]); 
       } 
      }); 
      return builder.create(); 
     } 

     public void setiPicModeSelectListener(IPicModeSelectListener iPicModeSelectListener) { 
      this.iPicModeSelectListener = iPicModeSelectListener; 
     } 

     public interface IPicModeSelectListener { 
      void onPicModeSelected(Constants.PicModes modes); 
     } 
    } 

После этого вы можете запустить намерение открыть камеру или галереи, как следует:

if(openCamera){ 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
}else{ 
//open gallery 
Intent intent = new Intent(Intent.ACTION_GET_CONTENT).setType("image/*"); 
} 
+0

это класс? но я реализую свой код в методе showFileChooser() –

+0

. Затем вы также можете сначала открыть диалоговое окно в showFileChooser() с запросом пользователя для его действия, а затем onItemClick() вы можете выполнить действие соответствующим образом. –

+0

Вы бы проиллюстрировали свой шаблон plz –

4

Добавить alertDialog и то в onActivityResult вместо случая 0 и 1 используйте REQUEST_CAMERA и SELECT_FILE. который вы будете объявлять в коде:

private static final int REQUEST_CAMERA = 1; 
private static final int SELECT_FILE = 2; 

final CharSequence[] items = {"Take Photo", "Choose from Library", "Cancel"}; 
      android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(mActivity); 
      builder.setTitle("Add Photo!"); 
      builder.setItems(items, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int item) { 

        if (items[item].equals("Take Photo")) { 
         PROFILE_PIC_COUNT = 1; 
         Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
         startActivityForResult(intent, REQUEST_CAMERA); 
        } else if (items[item].equals("Choose from Library")) { 
         PROFILE_PIC_COUNT = 1; 
         Intent intent = new Intent(
           Intent.ACTION_PICK, 
           MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
         startActivityForResult(intent,SELECT_FILE); 
        } else if (items[item].equals("Cancel")) { 
         PROFILE_PIC_COUNT = 0; 
         dialog.dismiss(); 
        } 
       } 
      }); 
      builder.show(); 
+0

как реализовать это внутри моего метода, называемого showFileChooser()? Я не использую прямую реализацию, но я использовал кнопку для вызова этого метода, а затем в моем сообщении это объявление метода –

+0

Просто добавьте весь этот код в свой метод showFileChooser(). вы будете хорошо идти. Это в основном добавляет alertdialog для пользователя, чтобы выбрать между галереей и камерой, а затем вызвать startActivityForResult() соответственно. –

+0

Объявите эти две строки глобально, хотя частные статические окончательные int REQUEST_CAMERA = 1; private static final int SELECT_FILE = 2; –

0

Прежде всего создать диалог с двумя кнопками, которые будут задавать пользователю выбрать либо Gallery или Camera. по щелчку кнопок набора Намерение для выбора изображения, как показано ниже:

public void dialog() 
    { 
     final Dialog dialog = new Dialog(getActivity(), R.style.cust_dialog); 
     dialog.setTitle("Upload From"); 
     dialog.setContentView(R.layout.dialog_pop_up_gallery_camera); 

     dialog.setTitle("Select an Option..."); 
     TextView txt_gallry=(TextView)dialog.findViewById(R.id.textView_gallery); 
     TextView txt_camera=(TextView)dialog.findViewById(R.id.textView_camera); 

     txt_gallry.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       dialog.dismiss(); 
          Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
          i.setType("image/*"); 
          startActivityForResult(i, PHOTO_PICKER_ID); 
      } 
     }); 
     txt_camera.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       dialog.dismiss(); 



       Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       //cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
       File fil = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg"); 
       cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(fil)); 
       startActivityForResult(cameraIntent, REQUEST_CODE_CAPTURE_IMAGE); 
      } 
     }); 
     dialog.show(); 
    } 

Вот файл макета для диалога:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center|center_vertical" 
       android:background="@color/lightpurple"> 

    <TextView 
     android:layout_width="250dp" 
     android:layout_height="wrap_content" 
     android:text="Gallery" 
     android:textColor="@color/white" 
     android:textSize="18sp" 
     android:padding="10dp" 

     android:drawableLeft="@drawable/galery_small" 
     android:drawablePadding="15dp" 
     android:id="@+id/textView_gallery"/> 
    <TextView 
     android:layout_width="250dp" 
     android:layout_height="wrap_content" 
     android:textColor="@color/white" 
     android:textSize="18sp" 
     android:text="Camera" 
     android:drawablePadding="15dp" 
     android:drawableLeft="@drawable/camera" 
     android:padding="10dp" 
     android:id="@+id/textView_camera"/> 
</LinearLayout> 
+0

Итак, я должен сделать еще одну деятельность за пределами моей основной деятельности? –

+0

Нет. Просто поместите этот код в свою основную деятельность и вызовите это диалоговое окно нажатием кнопки, где вы вызывали 'showFileChooser()', а также помещали этот 'xml' в папку' res/layout'. –

+0

@BurhanuddinRabbani вы с этим? Или нужна помощь? –

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