当我select任何第三方相机应用程序时,相机意图中的空指针exception

我的问题是,每次我select第三方相机应用程序,例如美丽加相机 ,我每次都得到空指针例外,我的代码是完全适用于默认的相机应用程序,它甚至可以与谷歌的新相机为摩托系列手机。

非常第一次对话框来select画廊或相机选项在这里:

private void OpenDialogForImage() { final CharSequence[] items = { "Gallary", "Camera", "Cancel" }; AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { // Do something with the selection switch (item) { case 0: Intent intent1 = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); intent1.setType("image/*"); startActivityForResult( Intent.createChooser(intent1, "Select File"), SELECT_FILE); break; case 1: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, REQUEST_CAMERA); break; case 2: break; } } }); AlertDialog alert = builder.create(); alert.show(); } 

这是OnActivityResult()方法:

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == Sponser_key && resultCode == Activity.RESULT_OK) { String sSponsors = data.getStringExtra("Sponsors"); if (sSponsors != null) sponsorsResp = new Gson().fromJson(sSponsors, GetSponsorsResp.class); } else if (requestCode == REQUEST_CAMERA) { if (resultCode == activity.RESULT_OK) { Bitmap photo = (Bitmap) data.getExtras().get("data"); ivProfile.setImageBitmap(photo); // CALL THIS METHOD TO GET THE URI FROM THE BITMAP Uri tempUri = Other.getImageUri(activity, photo); file = new File(Other.getRealPathFromURI(activity, tempUri)); } else { /** * not select any image */ } } else if (requestCode == SELECT_FILE) { if (resultCode == activity.RESULT_OK) { Uri selectedImageUri = data.getData(); ivProfile.setImageURI(selectedImageUri); file = new File(Other.getPath(activity, selectedImageUri)); } } } 

上面的代码是注意为一些第三方应用程序,如我前面提到的工作。 我在这一行中得到NullPointerException: Bitmap photo =(Bitmap)data.getExtras()。get(“data”);

Related of "当我select任何第三方相机应用程序时,相机意图中的空指针exception"

如果你想利用第三方应用程序,将不会有一个完美的解决scheme,因为他们不需要遵循与标准的Android相机应用程序相同的合同。 但是,你现在可能会得到比现在更好的结果。

标准的相机应用程序履行这个合同:

  1. 它在intent.getExtras.get("data")返回缩略图
  2. 如果你提供一个带有intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)Uri ,它将把全尺寸的图像保存在这个位置。

(有关重要​​细节,请参阅培训文章 。)

虽然您尝试的特定第三方相机应用程序不符合合约的第一部分,但您可能更喜欢第2部分。

给定全尺寸的图像,创build显然需要的缩略图并不难,例如在Stack Overflow中使用答案。

看看这个文件: https : //github.com/iPaulPro/aFileChooser/blob/master/aFileChooser/src/com/ipaulpro/afilechooser/utils/FileUtils.java

尝试使用这个:

 File mPhotoFile = FileUtils.getFile(context,data.getData()); 

哪个返回File。

这是使用外部应用程序处理function的问题。 从理论上讲,接受Intent动作的应用程序应该正确地处理Intent并返回你所要求的数据,但是在实践中,你很难做到这一点……例如,任何应用程序都可以说它处理“image捕获“,但是如果您要将您的Intent传递给编程不良或恶意的应用程序,则没有任何措施可以阻止该应用程序执行与您所期望的完全不同的任何操作,或者什么也不做。 如果您select让您的应用放弃对其他应用的控制以实现某些function,那么您将冒任何被select的应用无法实现该function的风险。

总是确保您的应用程序能够按照您希望的方式拍摄照片:

  • 为您的相机创build一个select器Intent ,并将结果限制为仅testing过的应用程序,并按照预期工作。 如果没有安装特定的应用程序,请禁用图片拍摄function。
  • 自己实现图像捕捉。