当我以意图打开相机时,我遇到了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上,我从未收到相机应用程序的响应。
我没有堆栈跟踪,因为我没有错误。
有人有任何想法吗?
答案 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)