我现在面临一个问题:
尝试将照片保存到我的应用文件下的指定位置时,如果我选择 DCIM 文件下的照片,我的手机( HTC D816h版本4.4.2,有一个SD卡)始终将照片存储在其他错误的位置。但是,如果是我选择的图片文件下的照片,裁剪的照片将保存在正确的位置。
另一方面,当app在另一部同样版本( HTC D626ph版本4.4.2 )的手机上运行时,没有任何问题,一切都很顺利。
问题
如果涉及DCIM文件中的照片,为什么我不能将照片存储在指定的位置?为什么这个问题只发生在我的手机上?
程序
首先,从手机图库中选择一张照片。其次,裁剪照片到你想要的任何尺寸。第三,将裁剪的照片保存到app文件中的指定位置。最后,将裁剪的照片显示为ImageView
。
我做了很多研究,但仍无法找到解决方案或理由。希望我能在这里得到一些帮助。提前谢谢!
这是我的代码:
private Uri m_uriCropPhoto = null;
private void crop(Uri uriOrig) {
File photo = null;
try {
String strFilePath = getFilePath(getActivity(), "profile_crop");
photo = createFile(strFilePath);
} catch(Exception e) {
Log.i("Tag","Can't create file to take picture!");
}
m_uriCropPhoto = Uri.fromFile(photo);
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uriOrig, "image/*");
List<ResolveInfo> list = getActivity().getPackageManager().queryIntentActivities(intent, 0);
if (list.size() == 0) {
Log.i("Tag","Can't crop picture!");
} else {
intent.putExtra("crop", "true");
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, m_uriCropPhoto);
startActivityForResult(intent,SMyCardsFragment.REQUEST_CODE_CROP_PHOTO);
}
}
private String getFilePath(String fileName) {
File file = getActivity().getExternalFilesDir(null);
if (file != null) {
return String.format(Locale.getDefault(), "%s/%s%s", file.toString(), fileName, ".jpg");
}
return null;
}
private File createFile(String filePath) throws Exception {
if (TextUtils.isEmpty(filePath) == true) {
return null;
}
File file = new File(filePath);
boolean isCreated = true;
if (file.exists() == false) {
isCreated = file.createNewFile();
}
return file;
}