본문 바로가기
안드로이드/권한

ActivityResultContracts 를 이용한 권한 체크

by 김어찐 2022. 10. 3.
728x90

Manifest파일 추가

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

 

 

단일 권한 승인

 

package com.ej.datatransfer.fragment

import android.Manifest
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.os.bundleOf
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.*
import androidx.navigation.fragment.findNavController
import com.ej.datatransfer.R
import com.ej.datatransfer.ResultActivity
import com.ej.datatransfer.databinding.ActivityMainBinding
import com.ej.datatransfer.databinding.FragmentFirstBinding
import com.ej.datatransfer.viewmodel.MainViewModel


class FirstFragment : Fragment() {

    lateinit var firstFragmentBinding: FragmentFirstBinding
    val mainViewModel by activityViewModels<MainViewModel>()

    val requestPermission = registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ){ grated ->
        if(grated){
            Log.d("granted","성공")
        }
    }



    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        firstFragmentBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_first,container,false)


        return firstFragmentBinding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        // 다른 액티비티로 이동
        firstFragmentBinding.secondBtn.setOnClickListener {
            requestPermission.launch(Manifest.permission.ACCESS_FINE_LOCATION)
        }




    }
}

 

여러권한 승인

package com.ej.datatransfer.fragment

import android.Manifest
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.os.bundleOf
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.*
import androidx.navigation.fragment.findNavController
import com.ej.datatransfer.R
import com.ej.datatransfer.ResultActivity
import com.ej.datatransfer.databinding.ActivityMainBinding
import com.ej.datatransfer.databinding.FragmentFirstBinding
import com.ej.datatransfer.viewmodel.MainViewModel


class FirstFragment : Fragment() {

    lateinit var firstFragmentBinding: FragmentFirstBinding
    val mainViewModel by activityViewModels<MainViewModel>()

    val requestPermission = registerForActivityResult(
        ActivityResultContracts.RequestMultiplePermissions()
    ){ map ->
        if (map[Manifest.permission.ACCESS_FINE_LOCATION]!!){
            Log.d("granted","ACCESS_FINE_LOCATION 성공")
        }
        if (map[Manifest.permission.ACCESS_COARSE_LOCATION]!!){
            Log.d("granted","ACCESS_COARSE_LOCATION 성공")
        }

    }



    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        firstFragmentBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_first,container,false)


        return firstFragmentBinding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        // 다른 액티비티로 이동
        firstFragmentBinding.secondBtn.setOnClickListener {
            requestPermission.launch(arrayOf(
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_COARSE_LOCATION,
            ))
        }




    }
}
728x90

'안드로이드 > 권한' 카테고리의 다른 글

안드로이드 권한 다시 뭍지 않음 일때  (0) 2024.03.22
TedPermission 보일러 플레이트 코드  (0) 2023.03.28
안드로이드 권한  (0) 2022.06.08