안드로이드/권한
ActivityResultContracts 를 이용한 권한 체크
김어찐
2022. 10. 3. 15:09
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