本来这段代码在红米note2上运行正常,但是在红米4上却报fileNotFound,我知道Android 6.0需要动态权限,但是动态权限早就加了,纠结半天各种百度,终于找到了原因,原来有些手机不会主动创建目录,需要先判断目录是否存在。
File picture = new File(CameraApp.getInstance().getAllSdPaths(TakePictureActivity.this)[0]+"/CameraJXD/"+fname);
Log.d("jxd","path "+picture.getPath() +"getAbsolutePath "+picture.getAbsolutePath());
try {
FileOutputStream fos = new FileOutputStream(picture.getPath()); // Get file output stream
fos.write(params[0]); // Written to the file
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
于是将代码改为如下,问题解决。
File folder = new File(CameraApp.getInstance().getAllSdPaths(TakePictureActivity.this)[0]+"/CameraJXD");
if(!folder.exists())
{
folder.mkdirs();
}
File picture = new File(CameraApp.getInstance().getAllSdPaths(TakePictureActivity.this)[0]+"/CameraJXD/"+fname);
Log.d("jxd","path "+picture.getPath() +"getAbsolutePath "+picture.getAbsolutePath());
try {
FileOutputStream fos = new FileOutputStream(picture.getPath()); // Get file output stream
fos.write(params[0]); // Written to the file
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
之前还被一个错误给误导了,一直在查E/HAL: Dawei load: module=/system/lib64/hw/gralloc.msm8953.so,后来发现根本不是这个错误导致的。
附需要的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
Android6.0动态权限添加(我这里用的是EasyPermission框架):
实现接口:
compile 'pub.devrel:easypermissions:0.3.0'
implements EasyPermissions.PermissionCallbacks
private String[] mPermissionList = new String[]{Manifest.permission.CAMERA,Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};
if (Build.VERSION.SDK_INT >= 23) {
if (EasyPermissions.hasPermissions(InitActivity.this, mPermissionList)) {
} else {
EasyPermissions.requestPermissions(this, "拍照需要的权限", 1, mPermissionList);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
Log.i("jxd", "onPermissionsGranted:" + requestCode + ":" + perms.size());
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
Log.i("jxd", "onPermissionsDenied:" + requestCode + ":" + perms.size());
}