Camera Image Capture Intent无法在Galaxy Tab Limited Edition中返回

时间:2011-06-14 01:53:17

标签: android camera android-3.0-honeycomb tablet

当我以意图打开相机时,我遇到了Galaxy Tab限量版(Google I / O)的问题。

这是我的代码:

Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new     
    File(mSavedFilePath)));
startActivityForResult(imageCaptureIntent, REQUEST_IMAGE_CAPTURE);

在摩托罗拉Xoom上,此代码运行正常。 但是在Galaxy Tab 10.1上,我从未收到相机应用程序的响应。

我没有堆栈跟踪,因为我没有错误。

有人有任何想法吗?

4 个答案:

答案 0 :(得分:3)

启动相机应用程序的意图时,您不需要相机权限。 然而,这是一个在Android平台上高度分散的过程。我有很多问题。基本上,如果您检查发送到相机应用程序的额外文件,您会注意到结果返回时他的大小为0字节。这个bug存在于很多Android设备中,而且它是修复大部分设备的一种解决方法,这就是当它失败时(这意味着没有返回可引发的额外输出,如果是,那么额外的文件没有创建或者长度为0)然后你需要从意图中得到Uri:intent.getData();这将返回一个uri到文件,它基本上与Extra Output Uri形成相同的方式,因此你可以使用相同的方法获取图像

您会注意到图像存储在Media.Images提供程序和相机目录中,并且指向了那里的intent.getData()Uri。

希望这会有所帮助。别忘了投票:D。

答案 1 :(得分:2)

我对此非常非常感到沮丧。但是,我确实找到了一个(相当可怜的)解决方法。

我应该说,我没有使用标准的ACTION_IMAGE_CAPTURE意图。因为我想在窗口中放置相机图像,所以我使用了自己的布局,并使用以下内容作为模板:

How to Program the Google Android Camera to Take Pictures

点击屏幕调用 Camera.PictureCallback 函数 onPictureTaken(byte [] imageData,Camera c),这是我抓取包含图片的byte []的地方。我有一个全局变量“byte [] MainApplication.snapshotBytes”,由imageData从此函数分配。

现在数据已全局保存,并且可供调用Activity使用,当前活动应如何终止,以便通知调用活动?好吧,有很多方法,但我很早就意识到按下后退按钮仍然会调用 OnActivityResult(...)。所以,我做了以下几点:

   if (imageData != null)
   {    
      MainApp.snapshotBytes = imageData;

      setResult(RESULT_OK);
      onBackPressed();
   }

现在,调用Activity还要负责其他三件事。

1:在启动相机活动之前设置 MainApp.snapshotBytes = null

2:当调用 OnActivityResult(...)时,它首先检查* resultCode == RESULT_OK *,然后使用存储在全局MainApp中的图像数据。 snapshotBytes。

3:最后,它再次设置 MainApp.snapshotBytes = null ,以便GC可以回收内存。

我将是第一个承认它是一个kludge的人,但是它可以兼容或者没有Camera-null-Intent错误。

我希望这有帮助!

答案 2 :(得分:0)

这听起来像个臭虫......

但为了以防万一,你有没有在你的AndroidManifest.xml中包含以下???

    <uses-permission android:name="android.permission.CAMERA"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

此外,您可以尝试使用Intent而无需额外的内容。

    Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(imageCaptureIntent, REQUEST_IMAGE_CAPTURE);

生成的位图会更小,但至少可以尝试查看它是否有效。 我希望它有所帮助。

此致

答案 3 :(得分:0)

听起来可能与此http://kevinpotgieter.wordpress.com/2011/03/30/null-intent-passed-back-on-samsung-galaxy-tab/

有关

还有另一个open question可能会提供更多信息