【问题标题】:Camera Intent call onDestroy()相机 Intent 调用 onDestroy()
【发布时间】:2016-05-31 12:53:08
【问题描述】:

在我的应用程序中,我想点击相机中的照片,并希望通过onActivityResult() 方法从相机结果中获取内容URI

在我的应用程序中,我使用以下方法获取内容 URL。

Uri currImageURI;
ArrayList<Uri> imageItems = new ArrayList<Uri>();
    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            if((requestCode == SELECT_PICTURE_FROM_CAMERA && resultCode == RESULT_OK) || (requestCode == SELECT_PICTURE_FROM_LIB && resultCode == RESULT_OK)) {
                currImageURI = data.getData();
                imageItems.add(currImageURI);
                Toast.makeText(UpdateMyServiceActivity.this, "Image added.", Toast.LENGTH_LONG).show();
            }
        }

我在ArrayList中添加了uri(因为用户可以上传多张图片)。

我的应用中有保存按钮。

当用户点击保存按钮时,我将imageItems 传递给AsyncTask 以将图像上传到服务器。

但这里有问题。

当用户点击保存按钮时,我得到 imageItems null

我调试我的应用程序。 添加 URI 到 ArrayList 后,会调用下面的 Activity 方法。

onResume()
onPause()
onStop()
onDestroy()
onCreate()
onStart()
onResume()

这就是为什么我将 arrayList 设为 null。

如何解决这个问题?

【问题讨论】:

    标签: java android android-camera-intent


    【解决方案1】:
    currImageURI = data.getData();
    

    如果您使用的是ACTION_IMAGE_CAPTURE,则此代码不正确。 ACTION_IMAGE_CAPTURE 不会返回 Uri,尽管少数相机应用会返回。相反,您在 ACTION_IMAGE_CAPTURE Intent 本身上提供 EXTRA_OUTPUT。然后,您保留与 EXTRA_OUTPUT 一起使用的任何值,然后在 onActivityResult() 中查找您的图像。

    这就是为什么我将 arrayList 设为 null。

    您的活动正在被销毁并重新创建,可能是因为您的进程在相机应用程序处于前台时被终止。这是完全正常的。只要您的应用不在前台,您的进程就可以随时终止。

    如何解决这个问题?

    通过保存的实例状态Bundle保持ArrayList

    【讨论】:

    • 每次我从相机意图中获取 URI。示例 URI:content://media/external/images/media/8484
    • @ChiragSavsani:你不会从任何 Nexus 设备上得到一个。如果您阅读文档,ACTION_IMAGE_CAPTURE 没有记录为返回 Uri。相机应用不需要返回Uri
    • 哦。非常感谢您指出这个话题。所以现在我必须更改我的代码。非常感谢您提供信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多