【问题标题】:Android Samsung: Camera app won't return intent.getData()Android三星:相机应用程序不会返回intent.getData()
【发布时间】:2011-02-14 05:10:33
【问题描述】:

我正在开发一个应用程序,其中从本机相机应用程序拍摄的图像。是要显示给用户的。 我做的代码是:

/* Intent */
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, TAKE_PICTURE);

/* Result */
onActivityResult(int requestCode, int resultCode,
        Intent returnIntent) {
    if(requestCode == TAKE_PICTURE) {
        //picture from Camera
        if (resultCode == Activity.RESULT_OK) {
            if(returnIntent != null) {
                try {
                    // Get the file path where the image is stored.
                    // This runs fine on all devices, except Samsung ones.
                    Uri selectedImage = returnIntent.getData();

                    if(selectedImage == null) {
                        if(returnIntent.getExtras() != null &&
                            returnIntent.getExtras().get(AppConstants.DATA) != null) {

                            // But, I get the image Bitmap here. Means the image is stored in disk.
                            Bitmap bmp = (Bitmap) returnIntent.getExtras().get(AppConstants.DATA);
                        }
                    }
                } catch (Exception e) {
                    //
                }
            }
        }
    }
}

这里的问题是,上面的代码在我尝试过的所有设备(HTC、SE)上都可以正常工作,但在三星设备上却以某种方式失败了。 “Uri selectedImage = returnIntent.getData();”从不返回任何东西。由于我的整个应用程序都是基于这种文件路径存储逻辑构建的,因此我无法继续。 有没有解决的人。

【问题讨论】:

  • 你找到解决办法了吗?

标签: android


【解决方案1】:

请参阅Specify filename for picture to be taken 以获取为 Intent 指定 EXTRA_OUTPUT 参数的代码,该参数可让您为图片指定文件名。记住调用活动结果时的文件名,并在 intent.getData 为 NULL 时使用该文件名

如果您阅读该错误报告中的其他 cmets,您会意识到在 Android 上拍照存在多少问题。

【讨论】:

  • 我尝试“记住文件名”,但是当调用 ActivityForResult 时我的成员变量也为空...
  • @ogborstad 将您的变量声明为静态字段并且不要初始化为 null,否则该变量将被覆盖。
  • 我知道这个问题发布已经有一段时间了,但你知道我将如何从图片库中获取图像吗?显然在少数手机上Uri uri = data.getData(); 总是返回 null(S3 mini, W8L..something)。
  • @Sebek : 如何在 Galaxy S3 上解决这个问题data.getData() always return null,请告诉我如何解决?
  • @AlexTran:尝试使用Intent pickImageIntent = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); if (pickImageIntent.resolveActivity(getPackageManager()) != null) startActivityForResult(pickImageIntent, R.id.SELECT_IMAGE_ACTIVITY_REQUEST_CODE);
【解决方案2】:

你最好的办法是生成一个你想保存图片的文件路径并将它存储在一个成员变量中。然后,在调用相机活动时,将其(作为 Uri)放在 MediaStore.EXTRA_OUTPUT 中。

确保覆盖 onSaveInstanceState() 和 onRestoreInstanceState() 并正确保存/恢复此路径。如果系统决定在此期间重新启动您的活动,这将确保您仍然拥有它(由于方向更改和/或内存不足的情况,这很有可能)。

【讨论】:

  • 你能给我举个例子说明如何处理上面例子中的 savedInstanceState() 和 onRestoreInstanceState() 吗?
猜你喜欢
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 2022-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多