0

我正在尝试注册一个ActivityResultContract使用android.provider.Settings.ACTION_REQUEST_SET_AUTOFILL_SERVICEkotlin 和 AndroidX:

class AutofillContract() : ActivityResultContract<Any?,ActivityResult>() {
    override fun createIntent(context: Context, input: Any?): Intent
        = Intent(android.provider.Settings.ACTION_REQUEST_SET_AUTOFILL_SERVICE)

    override fun parseResult(resultCode: Int, intent: Intent?): ActivityResult
        = ActivityResult(resultCode, intent)
}

val afrl = registerForActivityResult(AutofillContract()) {
    if (it.resultCode == RESULT_OK) ...
    else ...
}

但是,当我尝试使用它时:

afrl.launch(AutofillContract().createIntent(this, null))

我得到IllegalArgumentException: Can only use lower 16 bits for requestCode,我认为这是由内部startActivityForResult()调用触发的。

我以前没有使用过自定义ActivityResultContract,虽然它看起来很简单,但对我来说也有点粗略——我不确定是否将输入视为无关紧要 ( Any?) 是要走的路,但它似乎与此无关case (第一个版本用作Intent输入类型,但似乎没有意义,问题“只能使用低 16 位......”是相同的)。

我正在使用androidx.activity:activity-ktx:1.2.0-alpha08.

4

1 回答 1

1

根据这个问题,当您使用旧版本的 Fragments 时会出现该错误。

您还必须将 Fragments 版本升级到androidx.fragment:fragment-ktx:1.3.0-alpha08.

于 2020-09-25T16:49:33.693 回答