为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

4 回答

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

0 回复 有任何疑惑可以回复我~

spacer.gifhttps://img1.sycdn.imooc.com//5b239e3f00019df113500526.jpg

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


0 回复 有任何疑惑可以回复我~
#1

weixin_慕仔8132962

同学请问下你解决了吗,我也卡到这,不知道setOnClickListener为什么是红色的
2020-03-25 回复 有任何疑惑可以回复我~

如果已经升级到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就能成功加载出图片了。


祝你成功了。

1 回复 有任何疑惑可以回复我~
#1

精慕门3101338

感谢但是还要加上 StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build());才好使
2018-08-03 回复 有任何疑惑可以回复我~

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


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信