首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android相机和照片选择器的意图

Android相机和照片选择器的意图
EN

Stack Overflow用户
提问于 2016-08-16 09:46:19
回答 3查看 33.4K关注 0票数 7

我正在开发android应用程序,其中一个功能是从画廊或相机拍摄照片。我很难让它和每个设备一起工作。我无法为每个android版本和每个设备找到合适的解决方案。我觉得我已经在互联网上搜索过,并且尝试了我找到的每一个代码,但是没有成功地使它对所有提到的东西都有效。我尝试过从官方android文档中实现代码,但也有同样的问题。从画廊里捡东西似乎很管用,但照相机却一点也不好使。有人能给我小费,链接或密码如何做吗?我真的失去了我的神经试图做这件事。我是机器人的新手..。

我需要两种意图,用于画廊和照相机。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-03 09:05:05

差不多半年后,我找到了解决办法。实际上,我发现了一个库,它可以处理每一个手机和每一个android版本。如果仍然有人需要解决这个问题,这里有一个答案。

EasyImage完成了任务!

票数 7
EN

Stack Overflow用户

发布于 2016-08-16 11:11:36

你可以这样做,

代码语言:javascript
复制
private static final int PICK_FROM_CAMERA = 1;
private static final int PICK_FROM_GALLARY = 2;


 Uri outPutfileUri;

//用于Marshmallow os中的RunTime Permision

代码语言:javascript
复制
private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    }; 




//Define Button in the Xml file and get them
Button galleryButton= (Button)findViewById(R.id.gallerybutton);
Button cameraButton= (Button)findViewById(R.id.camerabutton);

//Listener's on the button 
galleryButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent galleryIntent = new Intent(Intent.ACTION_PICK,                                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            // Start the Intent
            startActivityForResult(galleryIntent, PICK_FROM_GALLARY);
        }
    });



    cameraButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //Camera permission required for Marshmallow version

                // permission has been granted, continue as usual
                Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                File file = new File(Environment.getExternalStorageDirectory(), "MyPhoto.jpg");
                outPutfileUri = Uri.fromFile(file);
                captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, outPutfileUri);
                startActivityForResult(captureIntent, PICK_FROM_CAMERA);
            }
        }
    });

然后在ActivityResult上你会得到图像

代码语言:javascript
复制
 public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {
            case PICK_FROM_CAMERA:
                if (resultCode == Activity.RESULT_OK) {
                    //pic coming from camera
                    Bitmap bitmap=null;
                    try {
                    bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), outPutfileUri);
                } catch (IOException e) {
                    e.printStackTrace();
                }

                }
            break;

            case PICK_FROM_GALLARY:

                if (resultCode == Activity.RESULT_OK) {
                    //pick image from gallery
                    Uri selectedImage = data.getData();
                    String[] filePathColumn = { MediaStore.Images.Media.DATA };

                    // Get the cursor
                    Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                    // Move to first row
                    cursor.moveToFirst();

                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    String imgDecodableString = cursor.getString(columnIndex);
                    cursor.close();
                    bitmap = BitmapFactory.decodeFile(imgDecodableString);




                }
            break;
        }
    }

//用于Marshmallow装置

代码语言:javascript
复制
cameraButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Camera permission required for Marshmallow version
                if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA)
                        != PackageManager.PERMISSION_GRANTED) {
                    // Callback onRequestPermissionsResult interceptadona Activity MainActivity
                    ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, PICK_FROM_CAMERA);
                } else {
                    // permission has been granted, continue as usual
                    Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(captureIntent, PICK_FROM_CAMERA);
                }
            }
        }); 


//Gallery storage permission required for Marshmallow version
    public static void verifyStoragePermissions(Activity activity) {
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(
                    activity,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
        }
    }

//对于Android7.0,您可以这样做

代码语言:javascript
复制
ContentValues values = new ContentValues(1);
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg");
        outPutfileUri = getActivity().getContentResolver()
                .insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    captureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
        | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

        captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, outPutfileUri);
        startActivityForResult(captureIntent, PICK_FROM_CAMERA);
票数 6
EN

Stack Overflow用户

发布于 2016-08-16 10:38:29

代码语言:javascript
复制
public String getPathFromURI(Uri contentUri) {
    String res = null;
    String[] proj = {MediaStore.Images.Media.DATA};
    Cursor cursor = getActivity().getContentResolver().query(contentUri, proj, "", null, "");
    if (cursor.moveToFirst()) {
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        res = cursor.getString(column_index);
    }
    cursor.close();
    return res;
}


@Override
public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
    if (resultCode == getActivity().RESULT_OK) {
        if (requestCode == 200) {
            Uri selectedImageUri = imageReturnedIntent.getData();
            if (null != selectedImageUri) {
                String path = getPathFromURI(selectedImageUri);
                DrawerAdapter.imageViewPP.setImageURI(selectedImageUri);
            }
        }else if(requestCode==0){
            Uri selectedImageUri = imageReturnedIntent.getData();
            if (null != selectedImageUri) {
                String path = getPathFromURI(selectedImageUri);
                //DrawerAdapter.imageViewPP.setImageURI(selectedImageUri);
            }
        }
    }
}

    public String getPathFromURI(Uri contentUri) {
    String res = null;
    String[] proj = {MediaStore.Images.Media.DATA};
    Cursor cursor = getActivity().getContentResolver().query(contentUri, proj, "", null, "");
    if (cursor.moveToFirst()) {
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        res = cursor.getString(column_index);
    }
    cursor.close();
    return res;
}

Intent intent1 = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), 200);

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38971608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档