首页 > 解决方案 > 新结果 API 错误:requestCode 只能使用低 16 位

问题描述

今天我换了新的ResultAPI,我遇到了这个错误:

java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
    at androidx.fragment.app.FragmentActivity.checkForValidRequestCode(FragmentActivity.java:715)
    at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:673)
    at androidx.core.app.ActivityCompat.startActivityForResult(ActivityCompat.java:234)
    at androidx.activity.ComponentActivity$2.onLaunch(ComponentActivity.java:207)
    at androidx.activity.result.ActivityResultRegistry$3.launch(ActivityResultRegistry.java:147)
    at androidx.activity.result.ActivityResultLauncher.launch(ActivityResultLauncher.java:42)
    at .MainActivity.getVideo(MainActivity.kt:61)
    at .MainActivity.access$getVideo(MainActivity.kt:18)
    at .MainActivity$onCreate$2.onClick(MainActivity.kt:42)
    at android.view.View.performClick(View.java:5232)
    at android.view.View$PerformClick.run(View.java:21289)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:168)
    at android.app.ActivityThread.main(ActivityThread.java:5885)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)

执行这些行时:

private val takeFile = registerForActivityResult(GetContent()) {
    Log.e("MainActivity", "fileName: $it")
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

    btn_get_video.setOnClickListener {
        getVideo()
    }

}


private fun getVideo() {
    takeFile.launch("video/*")
}

无法REQUEST_CODE使用这个新的结果 API 手动声明。

注意:
它有时有效!

[更新]
我注册了多个合同(TakeVideo 和 GetContent),我发现注册的顺序很重要(第一个像一个魅力,但其他的会崩溃)。也许我们只需要为每个活动注册一个合同?!

[更新 #2]
该问题已在最新版本的活动 (1.2.7-alpha07) 中得到修复。现在它警告您添加活动和片段相关的依赖项。

标签: androidandroid-jetpackonactivityresultstartactivityforresult

解决方案


添加或更新此依赖项:

implementation 'androidx.fragment:fragment:1.3.0'

使用ActivityResultAPI 时,请使用此片段依赖项以确保其FragmentActivity兼容。


推荐阅读