onActivityResult не работает должным образом - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть намерение, которое выбирает изображение (я называю это фрагментом):

 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: результат: -1 успех = true

Как видите, результат был успешным, но код запроса изменяется. так что я не могу проверить, что это был за запрос.

1 Ответ

1 голос
/ 29 апреля 2020

Ваш startActivityForResult() вызов должен быть на том же уровне, что и ваш onActivityResult().

Итак, если вы хотите, чтобы onActivityResult() был активным, позвоните startActivityForResult() на этом мероприятии. .

startActivityForResult() на фрагменте преднамеренно изменяет requestCode, чтобы минимизировать конфликты с другими вызовами startActivityForResult(), особенно с другими фрагментами в той же операции.

...