2016-03-30 22 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

はい、それは私の目標ですが、その2つはすべて同じ時間に実行されています –

+0

[ギャラリーから、またはカメラから画像を選択するためのダイアログ]の可能な複製(http://stackoverflow.com/questions/10165302/dialog-to-pick -image-from-gallery-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

が追加alertDialogonActivityResultでは、0と1の大文字と小文字の代わりにREQUEST_CAMERASELECT_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()メソッドにこのコード全体を追加するだけです。あなたは行くのが良いでしょう。これは基本的に、ユーザーがギャラリーとカメラのどちらかを選択し、それに応じてstartActivityForResult()を呼び出すためのalertdialogを追加します。 –

+0

これらの2行をグローバルに宣言します。private static final int REQUEST_CAMERA = 1; プライベート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あなたはそれで済んでいますか?または助けが必要ですか? –

関連する問題