1.按钮事件
AddCarProduct.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (ContextCompat.checkSelfPermission(AddCarProduct.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申请权限,REQUEST_TAKE_PHOTO_PERMISSION是自定义的常量 ActivityCompat.requestPermissions(AddCarProduct.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 2); }else { //有权限,直接拍照 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 启动系统相机 startActivityForResult(intent,1); } } });
2.获取权限 直接重写
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 2) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { //获取权限成功,可以拍照 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 启动系统相机 startActivityForResult(intent,1); } else { Toast.makeText(this, "请在应用管理中打开“相机”访问权限!", Toast.LENGTH_LONG).show(); finish(); } } }
3.相机拍照完成得到返回信息
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK&&requestCode == 1) { // 如果返回数据 Bitmap data1 = (Bitmap) data.getExtras().get("data"); String base64 = PhotoUtils.bitmapToBase64(data1); map.clear(); if (NetUtil.isNetAvailable(this)) { map.put("imgBase64",base64); Log.d("aaaaa", "onActivityResult: "); OKhttptils.post(this, Config.PARSEVIN, map, new OKhttptils.HttpCallBack() { @Override public void success(String response) { Gson gson = GsonFactory.create(); ChassisNumber chassisNumber = gson.fromJson(response, ChassisNumber.class); String vin = chassisNumber.getData().getResult().getVin(); carCjh.setText(vin); } @Override public void fail(String response) { Toast.makeText(AddCarProduct.this, "获取车架号失败", Toast.LENGTH_SHORT).show(); } }); } //做缓存存储 if (resultCode == Activity.RESULT_OK) { String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 Log.i("TestFile", "SD card is not avaiable/writeable right now."); return; } new DateFormat(); String name = DateFormat.format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg"; Toast.makeText(this, name, Toast.LENGTH_LONG).show(); Bundle bundle = data.getExtras(); Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式 FileOutputStream b = null; File file = new File("/sdcard/Image26/"); file.mkdirs();// 创建文件夹 String fileName = "/sdcard/Image/"+name; try { b = new FileOutputStream(fileName); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件 } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { b.flush(); b.close(); } catch (IOException e) { e.printStackTrace(); } } try { }catch(Exception e) { Log.e("error", e.getMessage()); } } } }