用于通过相机捕获图像的 startActivityForResult returns 不同的请求代码?
startActivityForResult for capturing image via the camera returns diffrent requestcode?
我正在开发一个 android 应用程序,可以附加来自相机的图像。
在两个不同的活动中发现的附加按钮,完成时来自相机的请求代码 returns 与另一个 activity 不同,这是我的代码:
File f = new File(Environment.getExternalStorageDirectory()+"/aaa/temp", "temp.jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
startActivityForResult(intent, 10);
onActivityResult 返回的 requestCode 是 NOT 10 而是“65546”,而来自另一个 activity 的 requestCode 是“327690” " !!!
为什么相机 activity 在启动时丢弃了我发送的“10”??
是bug吗?有什么解决方法吗?
我遇到了同样的问题。在每个 Activity
中创建一个 public static final int
并将正确的用作 requestCode。此外,如果您从 Fragment
调用 startActivityForResult(...)
,请尝试将其更改为“getActivity().startActivityForResult(...)
”
您需要手动设置来自两个活动(请求和响应)的请求和结果代码,这意味着您需要拥有自己的相机-activity 实现 class。您应该 post 来自 (Camera-Activity) class 的代码,以便我们帮助您。
如其他答案中所述,使用正确的 request/result 代码确保安全的一个好方法是为每个 request/result 代码声明 public static int codeX 并在每个代码中使用这些变量打电话。
为了进一步帮助您,这里有一个关于如何为两个通信活动实现并发请求和结果代码的示例:
请求Activity
int requestCode=1;
int resultOk=0;
Intent intent = new Intent(getApplicationContext(), Responding.class);
startActivityForResult(intent,requestCode);
响应相机-Activity
int resultOk=0;
Intent returnIntent = new Intent();
// you can use this to pass your stuff to the Requesting activity
returnIntent.putExtra("extraStuff",stuff);
setResult(resultOk,returnIntent);
finish();
请求Activity
int resultOk=0;
@Override
protected void onActivityResult(int request, int result, Intent data) {
super.onActivityResult(request, result, data);
if (result == resultok && request == requestCode) {
//get your extra stuff from intent
int result = data.getIntExtra("extraStuff", 0);
} else {
// Handle different scenarios
}
}
onActivityResult the returned requestCode is NOT 10 but "65546" and from the other activity the requestCode is "327690" !!!
Why does the camera activity discards the "10" that I have sent when starting it??
Is it bug? Is there any workaround?
您正在从片段开始 activity 并在 activity 中接收结果。就是这个问题。
您需要启动 activity 并在片段中或在 activity 中获得结果。两者不要混用。
发生的情况是,在 v4 支持库片段中,片段索引编码在请求代码的前 16 位中,而您的请求代码在后 16 位中。例如,65546 实际上是 1 << 16 + 10
而 327690 是 5 << 16 + 10
。此片段索引稍后用于查找将结果传送到的正确片段。
我正在开发一个 android 应用程序,可以附加来自相机的图像。 在两个不同的活动中发现的附加按钮,完成时来自相机的请求代码 returns 与另一个 activity 不同,这是我的代码:
File f = new File(Environment.getExternalStorageDirectory()+"/aaa/temp", "temp.jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
startActivityForResult(intent, 10);
onActivityResult 返回的 requestCode 是 NOT 10 而是“65546”,而来自另一个 activity 的 requestCode 是“327690” " !!!
为什么相机 activity 在启动时丢弃了我发送的“10”??
是bug吗?有什么解决方法吗?
我遇到了同样的问题。在每个 Activity
中创建一个 public static final int
并将正确的用作 requestCode。此外,如果您从 Fragment
调用 startActivityForResult(...)
,请尝试将其更改为“getActivity().startActivityForResult(...)
”
您需要手动设置来自两个活动(请求和响应)的请求和结果代码,这意味着您需要拥有自己的相机-activity 实现 class。您应该 post 来自 (Camera-Activity) class 的代码,以便我们帮助您。
如其他答案中所述,使用正确的 request/result 代码确保安全的一个好方法是为每个 request/result 代码声明 public static int codeX 并在每个代码中使用这些变量打电话。
为了进一步帮助您,这里有一个关于如何为两个通信活动实现并发请求和结果代码的示例:
请求Activity
int requestCode=1; int resultOk=0; Intent intent = new Intent(getApplicationContext(), Responding.class); startActivityForResult(intent,requestCode);
响应相机-Activity
int resultOk=0; Intent returnIntent = new Intent(); // you can use this to pass your stuff to the Requesting activity returnIntent.putExtra("extraStuff",stuff); setResult(resultOk,returnIntent); finish();
请求Activity
int resultOk=0; @Override protected void onActivityResult(int request, int result, Intent data) { super.onActivityResult(request, result, data); if (result == resultok && request == requestCode) { //get your extra stuff from intent int result = data.getIntExtra("extraStuff", 0); } else { // Handle different scenarios } }
onActivityResult the returned requestCode is NOT 10 but "65546" and from the other activity the requestCode is "327690" !!!
Why does the camera activity discards the "10" that I have sent when starting it??
Is it bug? Is there any workaround?
您正在从片段开始 activity 并在 activity 中接收结果。就是这个问题。
您需要启动 activity 并在片段中或在 activity 中获得结果。两者不要混用。
发生的情况是,在 v4 支持库片段中,片段索引编码在请求代码的前 16 位中,而您的请求代码在后 16 位中。例如,65546 实际上是 1 << 16 + 10
而 327690 是 5 << 16 + 10
。此片段索引稍后用于查找将结果传送到的正确片段。