我想知道我是否正确理解requestCode的概念。 这个整数是什么,在:
中设置的整数是否重要private static int CAMERA_REQUEST = ???;
谢谢
答案 0 :(得分:65)
requestCode可帮助您识别您回来的Intent。例如,假设您的活动A(主要活动)可以调用活动B(摄像机请求),活动C(音频录制),活动D(选择联系人)。
每当随后调用的活动B,C或D完成并需要将数据传回A时,现在您需要在onActivityResult中识别要从哪个Activity返回并相应地处理您的处理逻辑。
public static final int CAMERA_REQUEST = 1;
public static final int CONTACT_VIEW = 2;
@Override
public void onCreate(Bundle savedState)
{
super.onCreate(savedState);
// For CameraRequest you would most likely do
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
// For ContactReqeuest you would most likely do
Intent contactIntent = new Intent(ACTION_VIEW, Uri.parse("content://contacts/people/1"));
startActivityForResult(contactIntent, CONTACT_VIEW);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == Activity.RESULT_CANCELED) {
// code to handle cancelled state
}
else if (requestCode == CAMERA_REQUEST) {
// code to handle data from CAMERA_REQUEST
}
else if (requestCode == CONTACT_VIEW) {
// code to handle data from CONTACT_VIEW
}
}
我希望这可以澄清参数的使用。
答案 1 :(得分:9)
看看我的例子here。您必须设置的整数可以是任何一个正数。只是不要让它们一样,你不想混它们,是吗?并且不要将它们设置为0 - 它返回没有结果,恕我直言,我有0的奇怪行为。至于否定,也不要使用它们,它们被保留用于其他callActivities函数中的否定结果。
答案 2 :(得分:6)
public void onActivityResult(int requestCode, int resultCode, Intent data)
app
仅通过上述方法接收来自不同intents
的结果。那么您如何理解哪些意图回复了您?出于这个原因,在调用意图之前,我们放置了一个名为requestCode
的自定义TAG / Label。通过我们自己定义的requestCODE
,我们可以检查我们收到的意图结果。
在示例中的requestCode
中,我为Camera Intent提供了1001。您可以输入任何所需的号码。 1200或2001或21.任何正整数范围为~2 ^ 16。
见附图。
答案 3 :(得分:3)
使用超出范围的整数将引发" java.lang.IllegalArgumentException:对于requestCode只能使用低16位"异常。
所以请记住,请求不只是任何正整数,而是16位的整数,所以从0到65535。
类似地,FragmentActivity中的validateRequestPermissionsRequestCode要求requestCode为8位,因此介于0和255之间。