问答详情
源自:2-3 Android调用系统相机之缩略图放大

拍了照片后点勾就直接闪退了,也没有保存到手机里,华为p8测的

拍完照就闪退了,也没有被保存

提问者:CoolRobbern 2017-07-21 16:44

个回答

  • qq_布莱恩卓德_03284580
    2018-12-29 16:51:38

    各位,我加了上面的代码,结果第二个按钮还是不能点开拍照

  • 宝慕林9895098
    2018-06-15 19:09:28

    spacer.gifhttps://img.mukewang.com/5b239e3f00019df113500526.jpg

    是这样吗,怎么不对,能具体说一下第二个按钮怎么修改吗


  • 奇迹3
    2017-11-04 19:53:47

    如果已经升级到android6.0以上会有个运行时权限,按老师这样敲就sd卡中有图片但是加载不出来。

    解决方法:

    1、由于拍照要用到CAMERA权限,所以现在Manifest文件中加上

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    2、申请运行时权限

    将第二个按钮的click事件修改如下

     btnStartCamera2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    List<String> permissionList = new ArrayList<String>();
                    if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                        permissionList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
                    }
                    if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                        permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
                    }
                    if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                        permissionList.add(Manifest.permission.CAMERA);
                    }
                    if(!permissionList.isEmpty()) {
                        String[] permissions = permissionList.toArray(new String[permissionList.size()]);
                        ActivityCompat.requestPermissions(MainActivity.this,permissions,1);
                    } else {
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        Uri photoUri = Uri.fromFile(new File(mFilePath));
                        intent.putExtra(MediaStore.EXTRA_OUTPUT,photoUri);
                        startActivityForResult(intent,REQUEST2);
                    }
                }
            });

           主要进行运行时权限的申请工作,申请了ManiFest中申请的三个静态权限。

    然后

    在MainActivity中添加如下代码

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 1) {
            if(grantResults.length > 0) {
                for(int result : grantResults) {
                    if(result != PackageManager.PERMISSION_GRANTED) {
                        Toast.makeText(MainActivity.this,"必须同意所有权限才能使用本程序",Toast.LENGTH_SHORT).show();
                        finish();
                        return;
                    }
                }
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                Uri photoUri = Uri.fromFile(new File(mFilePath));
                intent.putExtra(MediaStore.EXTRA_OUTPUT,photoUri);
                startActivityForResult(intent,REQUEST2);
            } else {
                Toast.makeText(MainActivity.this,"发生未知错误",Toast.LENGTH_SHORT).show();
                finish();
            }
        }
    }

    主要进行申请权限时是否被同意的情况

    最后

    如果三个权限都同意了的话ImageView就能成功加载出图片了。


    祝你成功了。

  • 燕知鸿鹄
    2017-08-01 13:59:09

    android.permission.WRITE_EXTERNAL_STORAGE这个权限添加了吗