爬坑过程很长,都觉得是手机问题了,最后发现还是自己没搞明白。
看看以下文章
简单的 Android 拍照并显示以及获取路径后上传
Android保存Bitmap到本地图库
Android拍照和相册+系统裁剪功能返回图片
动态添加权限。

  public void takePhone(View view) {        if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)                != PackageManager.PERMISSION_GRANTED) {            ActivityCompat.requestPermissions(getActivity(),                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA},                    MY_PERMISSIONS_REQUEST_CALL_PHONE2);        } else {            takePhoto();        }    }

拍照的方法

private void takePhoto() {destoryBimap();        String state = Environment.getExternalStorageState();        if (state.equals(Environment.MEDIA_MOUNTED)) {            Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);        startActivityForResult(intent, PHOTO_WITH_CAMERA);        } else {            Toast.makeText(getActivity(), "没有SD卡", Toast.LENGTH_LONG).show();        }    }

返回的方法

 public void onActivityResult(int req, int res, Intent data) {        switch (req) {            /**             * 拍照的请求标志             */            case PHOTO_WITH_CAMERA:                if (res == RESULT_OK) {                    Uri uri = data.getData();                    if (uri != null) {                        this.photo = BitmapFactory.decodeFile(uri.getPath());                    }                    if (this.photo == null) {                        Bundle bundle = data.getExtras();                        if (bundle != null) {                            this.photo = (Bitmap) bundle.get("data");                            Intent intent = new Intent(getActivity(), CollectActivity.class);     intent.putExtra("bm", this.photo);                        startActivity(intent);                        } else {                            Toast.makeText(getActivity(), "拍照失败", Toast.LENGTH_LONG).show();                            return;                        }                    }                    FileOutputStream fileOutputStream = null;                    try {                        // 获取 SD 卡根目录                        String saveDir = Environment.getExternalStorageDirectory() + "/photos";                        // 新建目录                        File dir = new File(saveDir);                        if (! dir.exists())                            dir.mkdir();                        // 生成文件名                        SimpleDateFormat t = new SimpleDateFormat("yyyy_MM_ddssSSS");                        String filename = "P" + (t.format(new Date())) + ".jpg";                        // 新建文件                        File file = new File(saveDir, filename);                        // 打开文件输出流                        fileOutputStream = new FileOutputStream(file);                        // 生成图片文件                        this.photo.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);                        // 相片的完整路径                        this.picPath = file.getPath();                    } catch (Exception e) {                        e.printStackTrace();                    } finally {                        if (fileOutputStream != null) {                            try {                                fileOutputStream.close();                            } catch (Exception e) {                                e.printStackTrace();                            }                        }                    }                    try {                        MediaStore.Images.Media.insertImage(getActivity().getContentResolver(),                                this.picPath, "photos", null);                    } catch (FileNotFoundException e) {                        e.printStackTrace();                    }                    // 最后通知图库更新                    getActivity().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));                } else {                    Log.i("tag", "失败");                }                break;                default:                break;        }    }

权限 onRequestPermissionsResult方法

    @Override    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {        if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE) {            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {                takePhoto();            } else {                Toast.makeText(getActivity(), "权限不够", Toast.LENGTH_SHORT).show();            }        }        if (requestCode == 3) {            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {                choosePhoto();            } else {                Toast.makeText(getActivity(), "权限不够", Toast.LENGTH_SHORT).show();            }        }        super.onRequestPermissionsResult(requestCode, permissions, grantResults);    }

更多相关文章

  1. Android 3.0之后开机无法接收系统广播权限原因
  2. Android 权限控制代码分析
  3. 安装APK文件到Android模拟器
  4. Android中监听Home键的4种方法总结
  5. 最新历史版本 :Android修改system只读权限:remount
  6. Android利用SAX解析XML文件
  7. Android Canvas绘图描述Android Canvas 方法总结

随机推荐

  1. Android(安卓)仿58同城进度条加载内容动
  2. android 按两次返回键退出
  3. Cocos2d-x & NDK
  4. windows下搭建cocos2dx Android开发环境
  5. android中操作SQLite常见错误
  6. Android - ScrollView 使用小计 里面嵌套
  7. Android学习-常见的UI控件 RadioGroup和R
  8. Android TimeLine 时间节点轴的实现
  9. Android 去掉ListView的HeaderView、Foot
  10. Android 全面屏的和有导航栏的判断