动态获取android6.0以下和android7.0,8.0以上相机权限,拍照裁剪上传,

如果我学会了,你们肯定也能学会
其实困难真的很难,
难在了我们要经历漫长的探索解决Bug的过程,这段时间不仅会消磨掉我们的时间,也会消磨掉我们的意志,
难在停下了前进的脚步,难在了我们没有太多解决问题的思路,难在了我们每个人都是那么的独特,那么个性,
我们总是感觉输在了起跑线上,就会输掉整个结局,其实这个世界并没有输和赢,输和赢本来就不存在,只是我们总是习惯性地给自己添加上这个麻烦,心理没有输和赢得人,只会有一种状态,活的坦然,也获得舒然,心里总是有输赢的人,有两种状态,一种是极端的成就,会处于俯视的状态,一种是极端的自负,
我是一名码农,这是我的丰收年

、、、、、、、、、、、、、、、、、
首先获取动态权限

//判断6.0大于等于.当前权限时,直接运行,超过6.0的话动态调取权限
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
                    != PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},1001);
            }
        }else {
        }

打开相机后的的处理数据

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 100 && resultCode == RESULT_OK) {
            Intent it = new Intent("com.android.camera.action.CROP");
            //得到拍完的照片进行裁剪
            it.setDataAndType(Uri.fromFile(new File(path)), "image/*");
            //设置是否支持裁剪
            it.putExtra("crop", true);
            //设置框的宽高比
            it.putExtra("aspactX", 1);
            it.putExtra("aspactY", 1);
            //设置输出的照片
            it.putExtra("outputX", 250);
            it.putExtra("outputY", 250);
            //将图片返回
            it.putExtra("return-data", true);

            startActivityForResult(it, 300);

        }
        //设置裁剪
        if (requestCode == 200 && resultCode == RESULT_OK) {
            //得到图片路径
            Uri uri = data.getData();
            //调用系统裁剪功能
            Intent it = new Intent("com.android.camera.action.CROP");
            //得到照片进行裁剪
            it.setDataAndType(uri, "image/*");
            //设置是否支持裁剪
            it.putExtra("crop", true);
            //设置框的宽高比
            it.putExtra("aspactX", 1);
            it.putExtra("aspactY", 1);
            //设置输出图片大小
            it.putExtra("outputX", 250);
            it.putExtra("outputY", 250);
            //将图片返回
            it.putExtra("return-data", true);

            startActivityForResult(it, 300);
        }
        //裁剪完后回到设置图片
        if (requestCode == 300 && resultCode == RESULT_OK) {
            Bitmap bitmap = data.getParcelableExtra("data");
            //获取文件路径
            File file = new File(getFilesDir().getAbsolutePath());
            if (!file.exists()) {
                //如果路径不存在就创建
                file.mkdirs();
            }
            //创建文件
            File file1 = new File(file, "photo.png");
            FileOutputStream fileOutputStream;
            try {
                //文件输出流
                fileOutputStream = new FileOutputStream(file1);
                //将bitmap写入文件流
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
                //刷新此输出流并强制将所有缓冲的输出字节被写出
                fileOutputStream.flush();
                fileOutputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            headActivitySdvPic.setImageBitmap(bitmap);
//            ToastUtils.showToast("获取到了");
//            updataPresenter.getUpdataHeadPic(Integer.parseInt(LoginUntils.getUserId()), LoginUntils.getSessionId(), file1);
            upLoadIcon(file1);
        }
    }

上传头像和打开相册事件,相机的处理

 //上传头像
    private void upLoadIcon(File file1) {
        userId = san.getInt("userid", 0);
        sessionId = san.getString("sessid", null);
//        uid = san.getInt("uid", 0) + "";
        RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file1);
//        final RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);
        MultipartBody.Part part = MultipartBody.Part.createFormData("image", file1.getName(), requestBody);


        RetrofitUtil.getDefault().create(GetApi.class).upLoadIcon(userId, sessionId, part)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ShangchBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(ShangchBean xiuPwdBean) {

                        SharedPreferences.Editor sanEditor = getSharedPreferences("san", Context.MODE_PRIVATE).edit();
                        String headPath = xiuPwdBean.getHeadPath();

                        sanEditor.putString("title", headPath).commit();
                        Toast.makeText(GerenXinxiActivity.this, "" + xiuPwdBean.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void onError(Throwable e) {
                    }
                    @Override
                    public void onComplete() {
                    }
                });
    }
    @OnClick(R.id.gr_tximg)
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.gr_tximg:

                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("添加图片");
                String[] items = {"选择本地照片", "拍照"};
                builder.setNegativeButton("取消", null);
                builder.setItems(items, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which) {
                            case 0: // 选择本地照片

                                //打开相册
                                Intent intent = new Intent(Intent.ACTION_PICK);
                                //设置图片格式
                                intent.setType("image/*");
                                startActivityForResult(intent, 200);
                                break;
                            case 1: // 拍照
                                //打开相机
                                Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                                //将图片放到SD card
                                intent1.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path)));
                                startActivityForResult(intent1, 100);


                                break;
                        }
                    }
                });
                builder.show();



                break;
        }
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值