android中调用系统的相册或者相机拍照并上传照片

启动选择页面(第一个页面)处理代码

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        UtilLog.d("resultCode:" + resultCode);

        switch (resultCode) {
            case 1:
                UtilLog.d("data:" + data);
                if (data != null) {
                    //取得返回的Uri,基本上选择照片的时候返回的是以Uri形式,但是在拍照中有得机子呢Uri是空的,所以要特别注意
                    Uri mImageCaptureUri = data.getData();
                    //返回的Uri不为空时,那么图片信息数据都会在Uri中获得。如果为空,那么我们就进行下面的方式获取
                    if (mImageCaptureUri != null) {
                        Bitmap image;
                        try {
                            //这个方法是根据Uri获取Bitmap图片的静态方法
                            image = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mImageCaptureUri);
                            if (image != null) {
                                savePicture(image, adapter.imageView);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

                } else {
                    //拍照处理
                    Bitmap image;
                    try {
                        image = BitmapFactory.decodeFile(getExternalCacheDir() + "/"+SelectPicPopupWindowActivity.TAKE_PHOTO_NAME);
                        if (image != null) {
                            savePicture(image, adapter.imageView);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                break;
            default:
                break;

        }
    }


    /**
     * 保存并返回的图片
     *
     * @param bitmap
     * @param imageView
     */
    private void savePicture(Bitmap bitmap, ImageView imageView) {
        FileOutputStream b = null;
        String str = DateFormat.format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg";
        String name = null;
        switch (adapter.clickPosition) {
            case 0:
                name = "1001_" + str;
                break;
            case 1:
                name = "1002_" + str;
                break;
            case 2:
                name = "1003_" + str;
                break;
            case 3:
                name = "1004_" + str;
                break;
            case 4:
                name = "1005_" + str;
                break;

        }

        String fileName = getCacheDir() + name;
        boolean bl = false;
        try {
            b = new FileOutputStream(fileName);
            bl = bitmap.compress(Bitmap.CompressFormat.JPEG, 10, b);// 把数据写入文件
            if (bl) {
                adapter.addUrl(fileName, adapter.clickPosition);//添加需要上传图片的链接
                UtilLog.d("bl:" + bl);
                UtilLog.d("fileName:" + fileName);
                Glide.with(this)
                        .load(fileName)
                        // .placeholder(R.drawable.anim)
                        // .bitmapTransform(new RoundedCornersTransformation(this, 50, 0, RoundedCornersTransformation.CornerType.ALL))
                        .crossFade(1000)
                        .into(imageView);
                UtilLog.d("xianshiwangcheng");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                b.flush();
                b.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

仿ios的选择页面




import java.io.File;

import android.Manifest;
import android.app.Activity;
import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;



public class SelectPicPopupWindowActivity extends Activity implements OnClickListener {
    private static final int OPNE_CAMRA=0;
    //调用相机拍照,保存照片的名字
    public static final String TAKE_PHOTO_NAME = "take_photo.jpg";
    private Button btn_take_photo, btn_pick_photo, btn_cancel;
    private LinearLayout layout;
    private Intent intent;
    public static String url;
    private int sign=1;//是否弹出横向拍照的提示,0不弹出,1弹出
    //下面这句指定调用相机拍照后的照片存储的路径
    File tempFile = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_select_pic_popup_window);
//        File dirFile = new File(getExternalCacheDir());
//        if (!dirFile.exists()) {
//            dirFile.mkdirs();
//        }
        tempFile = new File(getExternalCacheDir(), TAKE_PHOTO_NAME);

        intent = getIntent();
        sign=intent.getIntExtra("sign",1);
        btn_take_photo = (Button) this.findViewById(R.id.btn_take_photo);//照相
        btn_pick_photo = (Button) this.findViewById(R.id.btn_pick_photo);//相册
        btn_cancel = (Button) this.findViewById(R.id.btn_cancel);

        layout = (LinearLayout) findViewById(R.id.pop_layout);

        // 添加选择窗口范围监听可以优先获取触点,即不再执行onTouchEvent()函数,点击其他地方时执行onTouchEvent()函数销毁Activity
        layout.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "提示:点击窗口外部关闭窗口!",
                        Toast.LENGTH_SHORT).show();
            }
        });
        // 添加按钮监听
        btn_cancel.setOnClickListener(this);
        btn_pick_photo.setOnClickListener(this);
        btn_take_photo.setOnClickListener(this);
    }

    // 实现onTouchEvent触屏函数但点击屏幕时销毁本Activity
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        finish();
        return true;
    }


    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_take_photo:
                try {

                    if (RenZhengListViewAdapter.isFirstTakePhono&&sign!=0) {
                        RenZhengListViewAdapter.isFirstTakePhono = false;
                        UtilDialog.showTakePhotoDialog(this, new DialogButtonClickInterface() {
                            @Override
                            public void leftButtonClick(Dialog dialog) {

                            }

                            @Override
                            public void rightButtonClick(Dialog dialog) {

                            }

                            @Override
                            public void singleButtonClick(Dialog dialog) {
                                if (Build.VERSION.SDK_INT >= 23) {
                                    int checkCallPhonePermission = ContextCompat.checkSelfPermission(SelectPicPopupWindowActivity.this, Manifest.permission.CAMERA);
                                    if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
                                        ActivityCompat.requestPermissions(SelectPicPopupWindowActivity.this,new String[]{Manifest.permission.CAMERA},OPNE_CAMRA);
                                        return;
                                    }else{

                                        openCamra();//调用具体方法
                                    }
                                } else {

                                    openCamra();//调用具体方法
                                }
                            }
                        });
                    } else {
                        if (Build.VERSION.SDK_INT >= 23) {
                            int checkCallPhonePermission = ContextCompat.checkSelfPermission(SelectPicPopupWindowActivity.this, Manifest.permission.CAMERA);
                            if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
                                ActivityCompat.requestPermissions(SelectPicPopupWindowActivity.this,new String[]{Manifest.permission.CAMERA},OPNE_CAMRA);
                                return;
                            }else{

                                openCamra();//调用具体方法
                            }
                        } else {

                            openCamra();//调用具体方法
                        }

                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            case R.id.btn_pick_photo:
                try {
                    //选择照片的时候也一样,我们用Action为Intent.ACTION_GET_CONTENT,
                    //有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个
                    Intent intent = new Intent();
                    intent.setType("image/*");
                    intent.setAction(Intent.ACTION_GET_CONTENT);
                    startActivityForResult(intent, 2);
                } catch (ActivityNotFoundException e) {

                }
                break;
            case R.id.btn_cancel:
                finish();
                break;
            default:
                break;
        }

    }
    private void openCamra(){
        //拍照我们用Action为MediaStore.ACTION_IMAGE_CAPTURE,
        //有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
        startActivityForResult(intent, 1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK) {
            return;
        }
        switch (requestCode) {
            // 如果是调用相机拍照时
            case 1:
                url = tempFile.getPath();
                setResult(1, data);
                finish();

                break;
            // 如果是直接从相册获取
            case 2:
                if (data != null)
                    setResult(1, data);
                finish();
                break;


        }
        super.onActivityResult(requestCode, resultCode, data);

    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            //就像onActivityResult一样这个地方就是判断你是从哪来的。
            case OPNE_CAMRA:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // Permission Granted
                    openCamra();
                } else {
                    // Permission Denied
                    UtilToast.showToast(SelectPicPopupWindowActivity.this,"很遗憾您把相机权限禁用了,不能拍照上传",0);
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

}


上传照片

private void uploadImage() {
        uploadDialog = UtilDialog.showUploadDialog(UploadImageActivity.this, new DialogUploadInterface() {
            @Override
            public void setTextView(TextView textView) {
                progressTv = textView;
            }
        });
        Map<String ,File> map=new HashMap<>();

        for (int i=0;i<images.size()-1;i++){
           File file = new File(images.get(i).getFileURL());
            map.put(i+".jpg",file);
        }
        String token= UtilSharedPreferences.readData(UploadImageActivity.this,"token","token").toString();
        OkHttpUtils
                .post()
                .url(uploadUrl)
                .addHeader("token",token)
                .addParams("category",applyTradeList.get(groupPosition).getFiles().get(childPosition).getCategory())
                .addParams("objectId",applyTradeList.get(groupPosition).getTradeBillId())
                .addParams("objectName","trade_bill")
                .files("files",map)
                .build()
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        UtilLog.d("e:"+e.toString());
                        uploadDialog.dismiss();
                        UtilToast.showToast(UploadImageActivity.this, "上传失败请重试", 0);
                    }

                    @Override
                    public void onResponse(String response, int id) {
                        UtilLog.d("response:"+response);
                        uploadDialog.dismiss();
                        JSONObject jsonObject = JSONObject.parseObject(response);
                        String success = jsonObject.getString("success");
                        boolean bl = Boolean.parseBoolean(success);
                        if (bl){
                            UtilDialog.showSingleButtonNoTitleDialog(mContext, "上传成功", "确认", new DialogButtonClickInterface() {
                                @Override
                                public void leftButtonClick(Dialog dialog) {

                                }

                                @Override
                                public void rightButtonClick(Dialog dialog) {

                                }

                                @Override
                                public void singleButtonClick(Dialog dialog) {
                                    dialog.dismiss();
                                    UploadImageActivity.this.finish();
                                }
                            });
                        }else {
                            UtilToast.showToast(UploadImageActivity.this, "上传失败请重试", 0);
                        }
                    }

                    @Override
                    public void inProgress(float progress, long total, int id) {
                        super.inProgress(progress, total, id);
                        UtilLog.d("progress:"+progress);
                        int mProgress = (int) (progress * 100);
                        progressTv.setText("正在上传 " + mProgress + "%");
                    }
                });

    }


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值