Nexus 5 的 ExifInterface 错误

ExifInterface bug with Nexus 5

在我的 Android 应用程序中,我通过 android.media.action.IMAGE_CAPTURE 意图使用相机。然后我使用 ExifInterface,因为我需要将照片的缩图发送到我的服务器:

ExifInterface exif = new ExifInterface(GetinnersActivity.this.getExternalFilesDir(null).toString() + File.separator + fileName);
                                byte[] thumbnail = exif.getThumbnail();
                                String miniature = Base64.encodeToString(thumbnail,Base64.DEFAULT); //This line crashes on Nexus 5

我用其他手机没有任何问题,但是 Nexus 5 在尝试执行我提供的最后一行代码时崩溃了。 Nexus 5 运行 Android 5.1.1。在我的 Android 清单中,

<uses-sdk
        android:minSdkVersion="17"
        android:targetSdkVersion="19" />

我想知道这是由于 Nexus 5 的一些已知错误还是我做错了什么。

06-21 19:49:55.748: E/AndroidRuntime(29256): java.lang.NullPointerException: Attempt to get length of null array
06-21 19:49:55.748: E/AndroidRuntime(29256):    at android.util.Base64.encode(Base64.java:494)
06-21 19:49:55.748: E/AndroidRuntime(29256):    at android.util.Base64.encodeToString(Base64.java:456)

我当然不会假设所有相机都会在 EXIF 中放入缩略图 headers。正如 Morrison Chang 在评论中指出的那样,getThumbnail() is allowed to return null。如果是这样,您将需要创建自己的缩略图。

I don't understand why it could be null since it's not null on other phones

有数以千计的 Android 设备型号和数以千计的相机应用程序。我怀疑你是否都测试过它们。

because my app can't run without it

再次创建您自己的缩略图。在 android create jpeg thumbnail 上进行 Google 搜索会发现很多可能性,包括: