【问题标题】:i want android override activity method in fragment我想要片段中的android覆盖活动方法
【发布时间】:2020-05-18 04:37:51
【问题描述】:

我想要片段中的onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) 方法

我找到了 google 和 anwser 片段

(mainActivity)getActivity.onrequestPermissionResult

但我不知道这个参数

你有没有其他方法或者知道这个参数?我只知道requestCode

视图模型

private val _permissionVisibility = MutableLiveData<Boolean>(ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) != PERMISSION_GRANTED)
    val permissionVisibility: LiveData<Boolean>
        get() = _permissionVisibility

xml绑定

 android:visibility="@{homeViewModel.permissionVisibility ? View.VISIBLE : View.GONE}"

主活动

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        Timber.d("Test ${requestCode} , ${permissions} , $grantResults ")

    }

【问题讨论】:

  • 在您的活动中获取片段的实例并在活动中调用您想要的方法
  • 在您请求权限的地方添​​加您的代码。您是否在片段或活动中请求权限?
  • 我也试过了,但是因为不知道这两个参数的值,所以做不到。是权限,grantResults
  • Nam Trung // 在 vi​​ewmodel 中请求权限,
  • @LeeDuSeop 你应该添加你所做的一切。更容易提供帮助。您的活动、片段和视图模型代码

标签: android kotlin permissions


【解决方案1】:

您可以使用新的 Activity Result APIs 以更简单的方式获取权限结果和 activityresult。 Activity Results API 提供了两种方法 - RequestPermissionRequestMultiplePermissions 。这两个人完全按照他们的名字行事。这是一个快速示例代码。

// Requesting Location Permission
bi.btnRequestPermission.setOnClickListener {
    askLocationPermission(android.Manifest.permission.ACCESS_FINE_LOCATION)
}

// Single Permission Contract
private val askLocationPermission = registerForActivityResult(ActivityResultContracts.RequestPermission()) { result ->
    if(result){
        Log.e("TAG", "Location permnission granted")
    }else{
        Log.e("TAG", "Location permnission denied")
    }
}

// -------------------------------------------------------------------

// Requesting Mutliple Permissions - Location & Bluetooth
bi.btnRequestPermission.setOnClickListener {
    askMultiplePermissions(arrayOf(
      android.Manifest.permission.ACCESS_FINE_LOCATION,
      android.Manifest.permission.BLUETOOTH
    ))
}

您必须在应用的 build.gradle 文件中添加以下依赖项。

implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha04'

查看博客以获取参考-https://wajahatkarim.com/2020/05/activity-results-api-onactivityresult/

【讨论】:

  • 最后一点“你必须添加以下依赖项”非常重要。
猜你喜欢
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 2019-10-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多