爬坑过程很长,都觉得是手机问题了,最后发现还是自己没搞明白。
看看以下文章
简单的 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. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android(安卓)操作SQLite数据库(初步)-在程序中删除数据库
  4. Android(安卓)3.0之后开机无法接收系统广播权限原因
  5. Android(安卓)TabHost布局
  6. Android(安卓)权限控制代码分析
  7. 修改Android(安卓)Media Scanner的扫描路径
  8. Android(安卓)Dependencies
  9. Android(安卓)Manifest文件

随机推荐

  1. Android(安卓)获取设备各种信息以及其它
  2. android 自定义对话框 背景透明
  3. Android之一种很有趣的界面跳动提示动画
  4. Android(安卓)wifi提示已连接但是无法访
  5. Android(安卓)Asynchronous Http Client
  6. 在Android中,如何通过onTouchEvent实现Dou
  7. android 复制、粘贴字符串 (判断API 11 )
  8. 自己定义的Tabhost
  9. [Android]设置Activity为全屏显示的两种
  10. 【Android】Android中的数据传递(2)