拍了照片后点勾就直接闪退了,也没有保存到手机里,华为p8测的
拍完照就闪退了,也没有被保存
拍完照就闪退了,也没有被保存
2017-07-21
如果已经升级到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就能成功加载出图片了。
祝你成功了。
举报