转载请注明出处,谢谢
背景
之前开发的一个android软件中调用了相机功能,有用户反映照相后点击确定按钮后无法返回的问题。
问题重现
最后经过自测,在小米2和三星一款手机上重现了这个问题,在其他手机上未发现该问题。
问题解决
出现该问题时,调用的代码如下:
public void shoot(View view) {
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())+ ".jpg");
startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE).putExtra(
MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)),REQUEST_CODE_SHOOT);
} else {
Util.showToast(this, R.string.sdcard_missing);
}
}
修改为以下,代码运行正常:
public void shoot(View view) {
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
File dir = new File(Environment.getExternalStorageDirectory() + "/ycz/pictures");
if(!dir.exists()){
dir.mkdir();
}
file = new File(dir, new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())+ ".jpg");
startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE).putExtra(
MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)),REQUEST_CODE_SHOOT);
} else {
Util.showToast(this, R.string.sdcard_missing);
}
}
问题分析
用系统默认的图片保存目录做为照片保存路径无法返回,而将照片保存的文件路径修改为自定义路径则返回正常,是由于一些手机禁止了系统公共的默认路径的访问。所以为了兼容所有的手机,推荐将要保存的文件保存到自定义的文件夹下。