片段中未调用 registerForActivityResult

ice*_*rit 6 android android-fragments android-jetpack

我最近迁移到最新的回调机制来注册请求权限,但是用于注册请求回调的最新 api 从未被触发我正在附加代码片段,任何人都可以帮助我找到问题所在,

        @AndroidEntryPoint
class ManageTeamFragment : Fragment(), View.OnClickListener {

    @Inject
    lateinit var manageTeamViewModel: ManageTeamViewModel

    private var requestMultiplePermissions:ActivityResultLauncher<Array<out String>>? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        requestMultiplePermissions =
            registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
                println("DEBUG $it")
                if (allPermissionsGranted()) {
                    btnAddUser.showLoading(true)
                    btnAddUser.postDelayed({
                        (activity as? DashboardActivity)?.navToFragment(AddUserFragment(), true)
                    }, 10)
                } else {
                    if (addOrEditUserBottomSheet == null) {
                        addOrEditUserBottomSheet =
                            AddOrEditUserBottomSheet(toolbar.context, addOrEditUserInteractionsListener)
                    }
                    addOrEditUserBottomSheet?.showBottomSheet()
                }
            }

    }


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {



        return inflater.inflate(R.layout.fragment_manage_team, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        initViews()
        initViewModels()
        // Inflate the layout for this fragment

        btnAddUser.setOnClickListener {
            println("DEBUG requesting")
            requestMultiplePermissions?.launch(REQUIRED_PERMISSIONS)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

梯度依赖

implementation 'androidx.activity:activity-ktx:1.2.0-alpha05'
implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha05'
Run Code Online (Sandbox Code Playgroud)

Fan*_*dez -1

只需尝试请求这样的一项许可即可。

private val requestMultiplePermissions =
        registerForActivityResult(ActivityResultContracts.RequestPermission()) {
            println("DEBUG $it")
            if (allPermissionsGranted()) {
                btnAddUser.showLoading(true)
                btnAddUser.postDelayed({
                    (activity as? DashboardActivity)?.navToFragment(AddUserFragment(), true)
                }, 10)
            } else {
                if (addOrEditUserBottomSheet == null) {
                    addOrEditUserBottomSheet =
                        AddOrEditUserBottomSheet(toolbar.context, addOrEditUserInteractionsListener)
                }
                addOrEditUserBottomSheet?.showBottomSheet()
            }
        }
Run Code Online (Sandbox Code Playgroud)

然后尝试在方法内启动请求onCreateView,并仅将所需的一个权限作为字符串传递。

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

//launch permission request here and pass the permission
requestMultiplePermissions.launch(Manifest.permission.READ_CONTACTS)
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_manage_team, container, false)
    }
Run Code Online (Sandbox Code Playgroud)