运行时权限请求不起作用

我正在尝试使用Kotlin的“运行时”权限来运行我的第一个Android应用程序,根据我对此示例的理解,但是权限请求对话框从不出现。

在提到的参考示例中编写Java代码的Kotlin等价物时,是否有任何错误?

应用程序假定在点击按钮时调用预定义的号码。

string.xml

  Kotlin Call  

activity_main.xml

   

MainActivity.kt

 package com.example.home.kotlin import android.Manifest import android.app.AlertDialog import android.content.DialogInterface import android.content.Intent import android.content.pm.PackageManager import android.net.Uri import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.Button import android.widget.Toast class MainActivity : AppCompatActivity() { private var mCall: Button? = null private var callIntent: Intent? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mCall = findViewById(R.id.button) mCall!!.setOnClickListener { _: View -> callIntent = Intent(Intent.ACTION_CALL) callIntent!!.data = Uri.parse("tel:0123456789") val hasCallPhone = checkSelfPermission(Manifest.permission.CALL_PHONE) if (hasCallPhone != PackageManager.PERMISSION_GRANTED) { if (!shouldShowRequestPermissionRationale(Manifest.permission.CALL_PHONE)) { showMessageOKCancel("You need to allow access to dialer", DialogInterface.OnClickListener { _, _ -> requestPermissions(arrayOf(Manifest.permission.CALL_PHONE), 1) }) return@setOnClickListener } requestPermissions(arrayOf(Manifest.permission.CALL_PHONE), 1) return@setOnClickListener } } } private fun showMessageOKCancel(message: String, okListener: DialogInterface.OnClickListener) { AlertDialog.Builder(this@MainActivity) .setMessage(message) .setPositiveButton("OK", okListener) .setNegativeButton("Cancel", null) .create() .show() } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { when (requestCode) { 1 -> if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission Granted Toast.makeText(this@MainActivity, "Permission Granted", Toast.LENGTH_SHORT) .show() startActivity(callIntent) this.finish() } else { // Permission Denied Toast.makeText(this@MainActivity, "Permission Denied", Toast.LENGTH_SHORT) .show() } else -> super.onRequestPermissionsResult(requestCode, permissions, grantResults) } } } 

在这里输入图像说明

在这里输入图像说明

您还需要将权限添加到manifest.xml。