2016-03-30 4 views
1

Ich muss einen Knopf machen, der zur Verfügung stellt, um Bild von der Galerie zu wählen oder von der Kamera zu nehmen.Wählen Sie ein Bild aus der Galerie oder nehmen Sie von der Kamera

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

Das Ergebnis funktioniert. Wenn ich aus der Galerie wähle, wird der Bildbetrachter das sehen, es funktioniert auch, wenn ich ein Foto von der Kamera nehme. Das Problem ist, in meiner ShowFileChooser() -Methode, alle meine Absicht laufen in der gleichen Zeit, also, wenn ich aus der Galerie wähle, läuft die Kamera auch noch. Ich wähle Kamera, die Galerie öffnet sich auch. Ich denke, dass ich meinen Code im Schalterfallmodus implementieren sollte, aber ich verstehe nicht, wie man das macht. Bitte helfen Sie mir, mein Anfängerproblem zu lösen.

+0

Sie sollen die Benutzer fragen, wo aus dem Bild zu wählen. –

+0

ja, das ist mein Ziel, aber alle diese zwei läuft in der gleichen Zeit –

+0

Mögliche Duplikate von [Dialog, um ein Bild aus der Galerie oder von der Kamera auszuwählen] (http://stackoverflow.com/questions/10165302/dialog-to-pick -image-from-gallery-or-from-camera) –

Antwort

1

Sie sollten zunächst wie entscheiden, welche Maßnahmen Sie wie ausführen möchten wie folgt

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

Danach Sie Absicht Kamera oder eine Galerie zu öffnen abfeuern kann wie folgt dar:

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

ist das eine Klasse? aber ich implementiere meinen Code in einer Methode namens showFileChooser() –

+0

Dann können Sie auch zuerst einen Dialog in showFileChooser() öffnen, der den Benutzer nach seiner Aktion fragt und dann onItemClick() Sie können die Aktion entsprechend ausführen. –

+0

würden Sie Ihr Muster plz –

4

hinzufügen alertDialog und dann in onActivityResult statt Fall 0 und 1 verwenden Sie die REQUEST_CAMERA und SELECT_FILE. die Sie wie im Code deklarieren:

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

veranschaulichen, wie dies in meiner Methode namens showFileChooser() zu implementieren? Ich verwende keine direkte Implementierung, aber ich habe eine Schaltfläche verwendet, um diese Methode aufzurufen, dann in meinem Beitrag ist die Methodendeklaration –

+0

Fügen Sie einfach diesen ganzen Code in Ihrer showFileChooser() -Methode. Du bist gut zu gehen. Dies fügt im Grunde einen Alertdialog hinzu, damit der Benutzer zwischen Galerie und Kamera wählen kann und dann startActivityForResult() entsprechend aufruft. –

+0

Deklatieren Sie diese beiden Zeilen global, obwohl private statische final int REQUEST_CAMERA = 1; private statische final int SELECT_FILE = 2; –

0

allererst einen Dialog mit zwei Schaltflächen erstellen, die Benutzer fragen, um entweder Gallery oder Camera. Bei dem Klicken von Schaltflächen, um die Bilder für die Kommissionierung wie unten Intent festgelegt:

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

ist die Layoutdatei für Dialog:

<?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

Also sollte ich eine andere Aktivität außerhalb meiner Hauptaktivität machen? –

+0

Nein, fügen Sie einfach diesen Code in Ihre Hauptaktivität ein und rufen Sie diesen Dialog bei Klick auf die Schaltfläche auf, wo Sie 'showFileChooser()' aufgerufen haben und legen Sie diese 'xml' ebenfalls in Ihren' res/layout'-Ordner. –

+0

@BurhanuddinRabbani bist du damit fertig? Oder brauchst du Hilfe? –

Verwandte Themen