1、申请权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" />
java
private static final String[] authBaseArr = {//申请类型 Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }; private static final int authBaseRequestCode = 1;
private boolean hasBasePhoneAuth() { PackageManager pm = getPackageManager(); for (String auth : authBaseArr) { if (pm.checkPermission(auth, getPackageName()) != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } private void initNavi() { // 申请权限 if (android.os.Build.VERSION.SDK_INT >= 23) { if (!hasBasePhoneAuth()) { this.requestPermissions(authBaseArr, authBaseRequestCode); return; } } }
2、开始起调相机
private static final int REQUEST_PERMISSION_CODE = 101; private String SAVE_PIC_PATH = Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED) ? Environment.getExternalStorageDirectory().getAbsolutePath() : "/mnt/sdcard";// private String SAVE_REAL_PATH = SAVE_PIC_PATH + "/good/savePic";//保存的确 private String ends = "";
Intent intent = new Intent(); // 指定开启系统相机的Action intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//图片 intent.addCategory(Intent.CATEGORY_DEFAULT);//图片 // intent.setAction("android.media.action.VIDEO_CAPTURE");//视频 // intent.addCategory("android.intent.category.DEFAULT");//视频 // 根据文件地址创建文件 String subForder = SAVE_REAL_PATH; File foder = new File(subForder); if (!foder.exists()) foder.mkdirs(); File file = new File(subForder, System.currentTimeMillis() + ".png");//图片 // File file = new File(subForder, System.currentTimeMillis() + ".mp4");//视频 ends = file.getPath(); if (file.exists()) { file.delete(); } // 把文件地址转换成Uri格式 Uri uri = Uri.fromFile(file); // 设置系统相机拍摄照片完成后图片文件的存放地址 intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(intent, REQUEST_PERMISSION_CODE);
3、保存图片
调用EXTRA_OUTPUT时,已经保存了图片到文件夹——只是相册不可见
如需相册可见,自定义保存即可
public void saveBitmapFile(Bitmap bitmap) { File file = new File(ends);//将要保存图片的路径 try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); bos.flush(); bos.close(); // FileOutputStream fos = new FileOutputStream(file); // bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); // fos.flush(); // fos.close(); Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); Uri uri = Uri.fromFile(file); intent.setData(uri); this.sendBroadcast(intent); } catch (IOException e) { e.printStackTrace(); } }