我必须做一个按钮,将提供从画廊或从相机选择图像。
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;
}
}
结果是有效的。如果我从图库中选择,图像查看器将查看它,如果我选择从相机拍照,它也有效。问题是,在我的show FileChooser()方法中,我所有的意图都在同时运行,所以当我从图库中选择时,相机仍然运行。我选择相机,图库也在打开。我认为我应该在切换案例模式下实现我的代码,但我不明白如何做到这一点。请帮助解决我的初学者问题。
首先创建一个带有两个按钮的对话框,要求用户选择< code>Gallery或< code>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>
你应该首先像下面这样决定你想要执行什么动作
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);
}
}
之后,您可以启动intent以打开相机或画廊,如下所示:
if(openCamera){
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
}else{
//open gallery
Intent intent = new Intent(Intent.ACTION_GET_CONTENT).setType("image/*");
}
添加 alertDialog,
然后在 onActivityResult
中使用REQUEST_CAMERA
和SELECT_FILE
,而不是 0 和 1 的大小写。您将在代码中声明:
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();
编辑:我调试了应用程序,并用初始化了。这消除了错误,但是现在ImageView没有得到更新,但是当我从Gallery中选择image时,它已经更新了。
有没有一个标准的方法来调用对话框选择从相机或从图库(如内置电话簿或Skype)的图像? 我看了一下这个,但是代码打开了图库,没有建议从相机中选择它。 设备:Samsung Galaxy Tab Android:2.3.3
ap.chooseImage(OPTION | count, CALLBACK) 拍照或从手机相册中选择图片。可直接传入一个数字作为 OPTION.count 参数。 OPTION 参数说明 名称 类型 必选 描述 count Number 否 最大可选照片数,默认1张,上限9张 sourceType String Array 否 相册选取或者拍照,默认 ['camera','album'] CA
在我的应用程序中,用户从相机捕获图像或从图库中选择图像,然后将其转换为pdf并上载到服务器,现在我的问题是,从相机捕获的图像在某些设备上旋转,我有代码尝试解决此问题,但它不起作用 任何建议或问题在哪里,没有错误代码或任何东西
我试图显示一个对话框,在那里按下图像按钮,然后从图库中选择图片或从相机中拍摄一些图片。我已经在努力选择一个图像并将其插入到正确的图像视图中。 现在,单击ImageButton(android:id=“@ id/imageSelect”)将显示对话框,然后选择从图库中选择,但它将图像插入(android:id=“@ id/imageSelect1),应该插入到(android:id=”@ id/im
我有一个问题。当我试图从相机上拍照时,质量很低。首先,使用摄像头捕捉图片,然后保存到目录中,同时获取图片并显示在我的应用程序中。保存在目录中的图片质量很好,但当我从目录中获取时,质量很低。下面是我的示例代码: 任何解决方案/建议?谢谢:) 解决了的 当我遵循下面Antrromet给出的代码时,问题解决了