Android - 如果照片位于DCIM文件

时间:2016-06-28 10:30:54

标签: android image file android-intent

我现在面临一个问题:

尝试将照片保存到我的应用文件下的指定位置时,如果我选择 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;
}

0 个答案:

没有答案