相机请求代码在Android中意味着什么

时间:2016-07-21 15:11:22

标签: android android-camera

有人可以解释相机请求代码的内容吗?

为什么我们使用它?

我正在尝试Android中的练习,我看到了代码。

这是我练习的代码;

public class imageActivity extends AppCompatActivity {

    Button image;
    private static final int CAMERA_REQUEST = 1888;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_resim);

        imageView = (ImageView)this.findViewById(R.id.imageView1);
        image = (Button) findViewById(R.id.capture);

        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
        });


    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            imageView.setImageBitmap(photo);
        }
    }
}

6 个答案:

答案 0 :(得分:6)

您可以在一个活动中对startActivityForResult()进行多次调用,这允许不同的Intent执行不同的操作。使用请求代码来标识您要返回的Intent

例如:

您可以为结果开始两项活动:

private static final int CAMERA_REQUEST = 1888;
private static final int GALLERY_REQUEST = 1889;
startActivityForResult(cameraIntent, CAMERA_REQUEST);
startActivityForResult(cameraIntent, GALLERY_REQUEST);

并在您的onActivityForResult()

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
        //Do stuff with the camara data result
    }
    else if (requestCode == GALLERY_REQUEST && resultCode == RESULT_OK) {
        //Do stuff with the gallery data result
    }
}

请注意private static final int完全是任意的。

答案 1 :(得分:2)

这就是它的含义:

当您启动结果活动时,例如请求相机拍摄您的照片然后将其返回到您的调用活动,您将传递一个唯一的整数值,如100001或您在该类中尚未使用的任何内容。

因此,简而言之,CAMERA_REQUEST可以是您在类中定义的任何值,如下所示:

private static final int CAMERA_REQUEST = 10001;

现在,由于您在从相机请求照片时通过了它,您将使用它来检查requestCode,因为如果它适用于相机本身,则必须匹配它。

我希望这有助于你理解。

答案 2 :(得分:1)

只是在收到RESPONSE时检测/确认REQUEST,我们使用CAMERA_REQUEST。

答案 3 :(得分:1)

用于接收相机意图结果

if (requestCode == CAMERA_REQUEST) {
    if (resultCode == RESULT_OK) {
        // Image captured and saved to fileUri specified in the Intent

    } else if (resultCode == RESULT_CANCELED) {
        // User cancelled the image capture
    } else {
        // Image capture failed, advise user
    }
}

See Official Documentation

答案 4 :(得分:1)

onActivityResult()可以处理多个调用,例如,如果您启动意图从图库中选择图像,则其结果也会在onActivityResult()中收到。

因此,为了检测我们得到的结果,我们添加一个标识符,说明我们使用CAMERA_REQUEST的原因。希望你明白。

答案 5 :(得分:1)

如果您询问CAMERA_REQUEST的原因,那么您可以将其视为您提供的任意跟踪值,并在调用startActivityForResult时返回结果。

文档说明了这个,

requestCode int: If >= 0, this code will be returned in onActivityResult() when the activity exits.

参考: https://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent,int)