使用startActivityForResult()调用时从Camera返回

时间:2012-05-17 17:28:36

标签: java android eclipse

我通过创建意图来使用相机:

Intent cameraI = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

然后以:

开始
startActivityForResult(cameraI, request);

其中request是预定义的常量整数。

然后我有了onActivityResult():

public void onActivityResult(int req, int res, Intent data) throws NullPointerException
{
    try{

    super.onActivityResult(req, res, data);
    if(req == request)
    {
        Bitmap picture = (Bitmap) data.getExtras().get("data");
        ImageView image = (ImageView) findViewById(R.id.imageView1);
        image.setImageBitmap(picture);
    }//if
    else
    {
        Toast.makeText(getApplicationContext(), "No picture taken", 4);
    }//else
    }catch (NullPointerException e){
        String error = "null pointer exception";
        Toast.makeText(getApplicationContext(), error, 4);
    }
}//onActivityResult

我的困境是我这台电脑上没有相机。我得到了eclipse的默认棋盘格和移动方形动画。这实际上有用吗?我一直在点击“拍照”按钮但没有发生任何事情。我想要发生的是拍摄一张照片,然后将其返回到调用i的活动中。这是默认操作还是我必须在拍摄一张照片后指定我希望它返回?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

YEah,较新的模拟器(2.3.3)应该可以进行测试。

某些设备存在以不同格式返回数据的问题。相反,你可以做的是,将一个位置(你可以选择)传递给相机应用程序,它会将新图像保存到该位置,你可以盲目地使用你指定的位置。

例如

File tempFolder = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
                + "/myfolder");
        tempFolder.mkdir();
        file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/myfolder",
                String.valueOf(System.currentTimeMillis()) + ".jpg");
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
        startActivityForResult(intent, TAKE_PICTURE);

答案 1 :(得分:0)

我不确定模拟器及其功能,但这是一个你可能会觉得有用的教程:

http://achorniy.wordpress.com/2010/04/26/howto-launch-android-camera-using-intents/

答案 2 :(得分:0)

有问题的代码最终起作用了。在设备上测试后,根据需要返回图片。 Eclipse的模拟相机根本无法正常工作。如果我没记错,你可以启用相机,但这完全是一个不同的讨论。