Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Permission().askMicrophonePermission(this@MainActivity)

Permission:

class Permission{
    private val tag = "Permission message"
    private val userMicrophonePermissionAgreeCode = 1
    fun askMicrophonePermission(context: Context){
        val currentMicrophonePermission = ActivityCompat.checkSelfPermission(context,android.Manifest.permission.RECORD_AUDIO)
        if(currentMicrophonePermission != PackageManager.PERMISSION_GRANTED)
            ActivityCompat.requestPermissions(context as Activity, arrayOf(android.Manifest.permission.RECORD_AUDIO), userMicrophonePermissionAgreeCode)
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        when(requestCode){
            userMicrophonePermissionAgreeCode -> {
                if( grantResults[0] == PackageManager.PERMISSION_GRANTED )
                    Log.i(tag,"Agree microphone permission")
                    Log.i(tag,"Not agree microphone permission")

onRequestPermissionsResult is a method from FragmentActivity. Since your Permission doesn't extend FragmentActivity, you cannot override onRequestPermissionsResult directly in the Permission.

You can delegate permission results to Permission.

class MainActivity : AppCompatActivity() {
    private lateinit var permission: Permission
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        permission = Permission()
        permission.askMicrophonePermission(this@MainActivity)
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        permission.handlePermissionsResult(resquestCode, permissions, grantResults)

Permission:

class Permission{
    private val tag = "Permission message"
    private val userMicrophonePermissionAgreeCode = 1
    fun askMicrophonePermission(context: Context){
        val currentMicrophonePermission = ActivityCompat.checkSelfPermission(context,android.Manifest.permission.RECORD_AUDIO)
        if(currentMicrophonePermission != PackageManager.PERMISSION_GRANTED)
            ActivityCompat.requestPermissions(context as Activity, arrayOf(android.Manifest.permission.RECORD_AUDIO), userMicrophonePermissionAgreeCode)
    fun handlePermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        when(requestCode){
            userMicrophonePermissionAgreeCode -> {
                if( grantResults[0] == PackageManager.PERMISSION_GRANTED )
                    Log.i(tag,"Agree microphone permission")
                    Log.i(tag,"Not agree microphone permission")

How I have done in my project

class AskPermission(val activity:Activity): FragmentActivity() {
private val code: Int =0
fun ask(context: Context, permission: String) {
    if (ContextCompat.checkSelfPermission(
            context,
            permission
        ) == PackageManager.PERMISSION_GRANTED
        Toast.makeText(context, "Already Granted", Toast.LENGTH_LONG)
            .show()
    } else {
        requestStoragePermission(context)
private fun requestStoragePermission(context: Context) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(
            activity,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
        ActivityCompat.requestPermissions(context as Activity, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),code)
        ActivityCompat.requestPermissions(context as Activity, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),code)
override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if(grantResults[0]==PackageManager.PERMISSION_GRANTED)
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.