通过相机捕获图像的startActivityForResult返回不同的请求代码?

时间:2015-04-30 10:53:32

标签: android android-camera

我正在开发一款能够从相机附加图像的Android应用程序。 在两个不同的活动中找到附加按钮,完成后从相机返回的请求代码从一个活动到另一个活动是不同的,这是我的代码:

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”,而另一个活动的requestCode是“327690”!!!

为什么相机活动会丢弃我在启动时发送的“10”?

是虫子吗?有没有解决方法?

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。在每个public static final int中创建一个Activity,并使用正确的一个作为requestCode。另外,如果您从startActivityForResult(...)致电Fragment,请尝试使用“getActivity().startActivityForResult(...)”进行更改

答案 1 :(得分:0)

您需要从两个活动(请求和响应)手动设置您的请求和结果代码,这意味着您需要拥有自己的Camera-activity实现类。您应该在此处发布该(相机 - 活动)课程的代码,以便我们为您提供帮助。

如其他答案所述,使用正确的请求/结果代码安全的一种好方法是为每个请求/结果代码声明public static int codeX,并在每次调用中使用这些变量。

为了进一步提供帮助,下面是一个关于如何为两个通信活动实现并发请求和结果代码的示例:

  • 申请活动

            int requestCode=1;
            int resultOk=0;
    
            Intent intent = new Intent(getApplicationContext(), Responding.class);
            startActivityForResult(intent,requestCode);
    
  • 响应相机活动

            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();
    
  • 申请活动

    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
    }
    
    }
    

答案 2 :(得分:0)

  

onActivityResult返回的requestCode不是10但是" 65546"而对于其他活动,requestCode是" 327690" !!!

     

为什么相机活动会丢弃" 10"我在开始时发送了吗?

     

是虫子吗?有没有解决方法?

您从片段开始活动并在活动中接收结果。这就是问题所在。

您需要启动活动并在片段中获取结果,或者在活动中同时获得结果。不要混淆两者。

在v4支持库片段中,片段索引编码在请求代码的前16位中,而您的请求代码位于最后16位。例如,65546实际上是1 << 16 + 10,而327690是5 << 16 + 10。此片段索引稍后用于查找将结果传递给的正确片段。