首页 文章

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

提问于
浏览
5

当我用Intent打开相机时,我遇到了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

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

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

  • 2

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

    但为了以防万一,你有没有在你的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);
    

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

    问候,

  • 0

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

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

    希望这可以帮助 . 别忘了投票:D .

  • 3

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

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

    How to Program the Google Android Camera to Take Pictures

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

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

    if (imageData != null)
       {    
          MainApp.snapshotBytes = imageData;
    
          setResult(RESULT_OK);
          onBackPressed();
       }
    

    调用Activity现在负责另外三件事 .

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

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

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

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

    我希望这有帮助!

相关问题