当前位置: 首页 > 知识库问答 >
问题:

onActivityResult的行为与预期不符

谭向晨
2023-03-14

我有一个选择一个图像的意图(我在一个片段中这样称呼它):

 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/png");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    String[] mimetypes = {"image/png","image/jpg", "image/bmp", "image/gif"};
    intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
    // special intent for Samsung file manager
    Intent sIntent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
    // if you want any file type, you can skip next line
    sIntent.putExtra("CONTENT_TYPE", "image/png");
    sIntent.addCategory(Intent.CATEGORY_DEFAULT);

    Intent chooserIntent;
    if (getContext().getPackageManager().resolveActivity(sIntent, 0) != null){
        // it is device with Samsung file manager
        chooserIntent = Intent.createChooser(sIntent, "Open file");
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { intent});
    } else {
        chooserIntent = Intent.createChooser(intent, "Open file");
    }

    try {
        startActivityForResult(chooserIntent, 548);
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(getContext(), "No suitable File Manager was found.", Toast.LENGTH_SHORT).show();
    }

在我的活动中:

    @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d(TAG, "onActivityResult: request code: " + requestCode);
    Log.d(TAG, "onActivityResult: result: " + resultCode + " Success = " + (resultCode == RESULT_OK));
    if (requestCode == 548 && resultCode == RESULT_OK) {
        Uri uri = data.getData();
        Log.d(TAG, "onActivityResult: URI: " + uri.toString());
        Log.d(TAG, "onActivityResult: OK");

    }
}

输出:OnActivityResult:请求代码:66084 OnActivityResult:Result:-1成功=true

正如您所看到的,结果是成功的,但请求代码发生了更改。所以我无法查证是什么请求。

共有1个答案

孟宏才
2023-03-14

您的StartActivityForResult()调用应与您的OnActivityResult()所在的调用相同。

因此,如果您希望OnActivityResult()在活动上,请在活动上调用StartActivityForResult()

片段上的StartActivityForResult()有意更改RequestCode以最大限度地减少与其他StartActivityForResult()调用的冲突,特别是对同一活动中的其他片段进行的调用。

 类似资料:
  • 使用4.0.31,我的AppHost配置方法是这样声明的: 我的印象是,这将把swagger用户界面的url设置为.../api/Resources的https版本,但是我仍然在swagger URL文本框中获得常规的超文本传输协议endpoint,例如: 我们的web服务器位于执行SSL卸载(并需要SSL)的负载平衡器之后,因此URL应为: 一个积极的方面是,使用“UseHttpsLinks”实

  • 在实用服务中,我有两个功能foo和bar。js 在我的测试文件中,我导入了实用ervice.js并窥探了条形图函数。我期望调用间谍计数为1,因为foo被称为,但它是0。如果我错过了什么,请建议。

  • 我的要求是有基于磁盘的缓存。如果缓存内存已满,我希望将LRU元素推送到磁盘。然后,如果磁盘上的文件已满,我希望驱逐磁盘上的LRU元素。这是一个非常简单的要求,但是我无法使用EhCache来实现。 我使用EhCache(2.10.1)进行以下配置: 我的期望是,当缓存被填满时(即缓存大小超过50M),我希望将LRU元素推送到文件中,从而为内存中的新元素创建一些空间。 然而,这不是EhCache的工作

  • 我正试图实现一个全屏幕响应的图像解决方案,具有以下松散的要求 0-600像素 经过一点挖掘,我决定使用尺寸: iPhone 6 我为每个屏幕大小创建了单独的图像(用于艺术方向),并使用了以下srcset代码 图像具有以下CSS(因此它的行为类似于背景:封面) 我把我的桌面显示器的尺寸调整得很小,并调整到全屏,图像被替换到正确的位置 然而,在我的手机和平板电脑上,它始终显示1920年的图像 理想情况

  • 我正在开发一个包含两个活动的问答应用程序:一个显示列表,另一个显示问题的详细信息(提示、选项等)。在中,我使用方法打开,如下所示: 其中是设置为1的常量。 在完成后,它应该返回所选选项的索引(假设它是一个多项选择题),因此我重写了回调: 我还在我的中实现了回调: 但是,当我运行应用程序时,输入,选择一个选项,然后回击,从日志中我看到在中,结果代码被正确地设置为-1: 但在方法中,结果代码为0。此外