当相机意图被发送后,onActivityResult立即被调用

5

我在我的应用程序中使用相机意图来启动相机,但是一旦意图被触发,onActivityResult就会被触发,而我甚至还没有拍照。

当我拍照、选择照片并返回到我的活动时,onActivityResult根本没有被调用。

以下是我启动相机的方法:

PackageManager pm = getPackageManager();
    if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
        Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        File tempDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"Mobile Map");
        if (!tempDir.exists()) {
            if (!tempDir.mkdir()) {
                Toast.makeText(this,
                        "Please check SD card! Image shot is impossible!",
                        Toast.LENGTH_SHORT).show();
            }
        }

        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",Locale.US).format(new Date());
        File mediaFile = new File(tempDir.getPath() + File.separator+ "IMG_" + timeStamp + ".jpg");

        photoUri = Uri.fromFile(mediaFile);
        camera.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
        startActivityForResult(camera, CAMERA_REQUEST);
    } else {
        Toast.makeText(this,"This device does not have a rear facing camera",Toast.LENGTH_SHORT).show();
    }

为什么onActivityResult只在相机意图启动后才被调用?

你说:“一旦(相机)意图被触发,onActivityResult就会被触发”,但是“当我拍照时... onActivityResult根本没有被调用”。那到底是哪一个呢? - Neoh
@Neoh,它会在意图被发送时调用,但当我实际想要它被调用时,比如当我拍照时,它却没有被调用。 - tyczj
当调用onActivityResult()时,resultCode参数的值是什么? - David Wasser
@DavidWasser resultCode 是 0,requestCode 是我在启动相机意图中提供的代码,因此它来自我的相机意图。 - tyczj
1个回答

5
问题在于我的清单文件中将活动设置为singleInstance,而显然startActivityForResult不喜欢这个。

2
是的,如果您的活动具有 launchMode="singleInstance",那么当您启动相机活动时,相机活动将被启动到另一个任务中。您无法在不同任务中的2个活动之间使用 startActivityForResult() 进行通信。这实际上是我的思路所在,也是我问关于结果代码的问题的原因。结果代码为0是 RESULT_CANCELED,这表示由于某种原因,您对 startActivityForResult() 的调用立即被取消了。 - David Wasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接