android - 在 4.4 Camera activity 中返回 null

标签 android

当我在 android 4.2 上运行此应用程序时,位图返回图像,但在 4.4 中它返回 null.......在 Gallery 中一切正常。

  if (items[which].equals("Camera")) {
                Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent, 1);

在onActivityResult中

 else if (requestCode == 1) {
            final Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
           if (imageNumber == 1)
               slip_image1.setImageBitmap(thumbnail);
            else if (imageNumber == 2)
                slip_image2.setImageBitmap(thumbnail);
            else if (imageNumber == 3)
                slip_image3.setImageBitmap(thumbnail);

最佳答案

   @SuppressLint("NewApi")
   public static String getRealPathFromURI_API19(Context context, Uri uri){
    String filePath = "";
    try { // FIXME NPE error when select image from QuickPic, Dropbox etc
        String wholeID = DocumentsContract.getDocumentId(uri);
        // Split at colon, use second item in the array
        String id = wholeID.split(":")[1];
        String[] column = {MediaStore.Images.Media.DATA};
        // where id is equal to
        String sel = MediaStore.Images.Media._ID + "=?";
        Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.INTERNAL_CONTENT_URI,
                column, sel, new String[]{id}, null);
        int columnIndex = cursor.getColumnIndex(column[0]);
        if (cursor.moveToFirst()) {
            filePath = cursor.getString(columnIndex);
        }

        cursor.close();


        return filePath;
    } catch (Exception e) { // this is the fix lol
        String result;
        Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
        if (cursor == null) { // Source is Dropbox or other similar local file path
            result = uri.getPath();
        } else {
            cursor.moveToFirst();
            int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
            result = cursor.getString(idx);
            cursor.close();
        }
        return result;
    }
}


@SuppressLint("NewApi")
public static String getRealPathFromURI_API11to18(Context context, Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    String result = null;

    CursorLoader cursorLoader = new CursorLoader(
            context,
            contentUri, proj, null, null, null);
    Cursor cursor = cursorLoader.loadInBackground();

    if(cursor != null){
        int column_index =
                cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        result = cursor.getString(column_index);
    }

    return result;
}

public static String getRealPathFromURI_BelowAPI11(Context context, Uri contentUri){
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
    int column_index
            = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

关于android - 在 4.4 Camera activity 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46082200/

相关文章:

android - 依次播放3个音频文件

android - Kotlin 如何创建目录。 MkDir() 不工作

android - 用户在Kotlin中授予使用访问权限后,如何导航回我的应用程序

android - 更改抽屉导航所选项目上的 fragment backstack 更改

java - 互联网连接异常失败

java - 如何将 Facebook 登录和电子邮件注册添加到我的 Google Cloud Endpoints 应用程序 (Java)?

安卓向后兼容

java - Android——谷歌对单例模式的矛盾

android - 如何获取最后一个 ScrollView 位置,scrollview

Java保证回调顺序执行