Tengo que hacer un botón que va a proporcionar para elegir la imagen desde la galería o tomar de la cámara.

 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;
    }
}

El resultado es de trabajo. Si puedo elegir de la galería, el imageviewer va a ver que, además de trabajar si puedo elegir tomar la foto desde la cámara.
El problema es, en mi showFileChooser() método, todos los de mi intención que se están ejecutando en el mismo tiempo, así que cuando me escogió desde la galería, la cámara sigue funcionando también. Puedo elegir la cámara, la galería es abrir demasiado. Creo que debería poner en práctica mi código en el interruptor de modo de casos, pero no entiendo cómo hacerlo. Por favor ayuda para resolver mi principiante problema.

3 Comentarios

  1. 5

    Agregar un alertDialog y, a continuación, en onActivityResult en lugar de caso de 0 y 1 utilice el REQUEST_CAMERA y SELECT_FILE. que vas a declarar como en el código:

    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();
    • cómo implementar esta dentro de mi método llamado showFileChooser()? Yo no uso directo de la aplicación, pero he utilizado un botón para llamar a ese método, a continuación, en mi post es la declaración del método
    • Sólo tiene que añadir el código en su totalidad en su showFileChooser() método . usted será bueno para ir. Básicamente, esto añade un alertdialog para que el usuario pueda elegir entre la galería y la cámara y, a continuación, llamar a startActivityForResult() en consecuencia.
    • Declatre estas dos líneas a nivel mundial a pesar de private static final int REQUEST_CAMERA = 1; private static final int SELECT_FILE = 2;
  2. 1

    Usted debe primero decidir como ¿qué acción desea realizar como sigue

      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);
            }
        }

    Después de que usted puede disparar la intención de abrir la cámara o de la galería como sigue:

    if(openCamera){
      Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    }else{
    //open gallery
     Intent intent = new Intent(Intent.ACTION_GET_CONTENT).setType("image/*");
    } 
    • es esta una clase? pero me implementar el código en un método llamado showFileChooser()
    • Entonces usted también puede abrir un cuadro de diálogo en showFileChooser() pedir al usuario para su acción y, a continuación, onItemClick() se puede realizar la acción en consecuencia.
    • le ilustrar su patrón plz
  3. 0

    Primer lugar, crear un cuadro de diálogo con dos botones que preguntar al usuario para elegir la Gallery o Camera.En el Clic de los botones conjunto de Intención para la selección de las imágenes como la siguiente:

    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();
        }

    Aquí está el archivo de diseño para el diálogo:

    <?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>
    • así, que debo hacer otra actividad fuera de mi mainactivity?
    • No, Sólo hay que poner este código en tu actividad principal y llamar a este cuadro de diálogo, haga clic en el botón, donde estaban llamando showFileChooser() y también poner que xml en su res/layout carpeta.
    • se le hace con eso? O necesita ayuda?

Dejar respuesta

Please enter your comment!
Please enter your name here