Android三星:相机应用程序不会返回intent.getData()

时间:2011-02-14 05:10:33

标签: android

我正在开发一款应用,其中的图片来自原生相机应用。将向用户显示。 我做的代码是:

/* 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();”永远不会退货。由于我的整个应用程序是基于文件路径存储的逻辑构建的,我无法继续。 有没有解决方案的人。

2 个答案:

答案 0 :(得分:11)

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

如果您阅读该错误报告中的其他评论,您将会发现Android上拍摄的问题有多少。

答案 1 :(得分:3)

您最好的选择是生成要将图片保存到的文件路径并将其存储在成员变量中。然后,在调用相机活动时,将它(作为Uri)放在MediaStore.EXTRA_OUTPUT额外。

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