ps:代码来源于郭大神的第一行代码。第三版,仅做学习使用
class MainActivity : AppCompatActivity() {
var makecall: Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
makecall = findViewById(R.id.makecall)
makecall?.setOnClickListener {
//6.0之前可以这样使用危险权限来拨打电话,
//6.0之后这种危险权限就被禁止了
//java.lang.SecurityException: Permission Denial: starting Intent
// { act=android.intent.action.CALL dat=tel:xxxxx cmp=com.android.server.telecom/.components.UserCallActivity }
// from ProcessRecord{706f4ee 24864:com.cjh.runtimepermissiontest/u0a332} (pid=24864, uid=10332)
// with revoked permission android.permission.CALL_PHONE
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){
//向用户申请权限授权, 实例 String数组 请求码
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CALL_PHONE), 1)
} else{
call()
}
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
//用户是否同意权限申请都会回调到这里,授权的结果则会封装在grantResults参数中
when (requestCode) {
1 -> {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED){
call()
} else {
Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show()
}
}
}
}
private fun call() {
try {
val intent = Intent(Intent.ACTION_CALL)
intent.data = Uri.parse("tel:10086")
startActivity(intent)
} catch (e: SecurityException){
e.printStackTrace()
}
}
}



