Skip to content

Instantly share code, notes, and snippets.

@stevdza-san
Created April 22, 2021 06:42
Show Gist options
  • Save stevdza-san/d1ef6b7a29f6a06c6cf9b64f63b433b3 to your computer and use it in GitHub Desktop.
Save stevdza-san/d1ef6b7a29f6a06c6cf9b64f63b433b3 to your computer and use it in GitHub Desktop.
For my Fused Location Provider API video tutorial on YouTube
import android.Manifest
import android.annotation.SuppressLint
import android.location.Geocoder
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.example.testapp.databinding.FragmentFirstBinding
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationServices
import com.vmadalin.easypermissions.EasyPermissions
import com.vmadalin.easypermissions.dialogs.SettingsDialog
class FirstFragment : Fragment(), EasyPermissions.PermissionCallbacks {
companion object {
const val PERMISSION_LOCATION_REQUEST_CODE = 1
}
private var _binding: FragmentFirstBinding? = null
private val binding get() = _binding!!
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
@SuppressLint("MissingPermission")
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
// Inflate the layout for this fragment
_binding = FragmentFirstBinding.inflate(inflater, container, false)
fusedLocationProviderClient =
LocationServices.getFusedLocationProviderClient(requireContext())
binding.button.setOnClickListener {
if (hasLocationPermission()) {
fusedLocationProviderClient.lastLocation.addOnSuccessListener { location ->
val geoCoder = Geocoder(requireContext())
val currentLocation = geoCoder.getFromLocation(
location.latitude,
location.longitude,
1
)
Log.d("FirstFragment", currentLocation.first().countryCode)
Log.d("FirstFragment", currentLocation.first().subLocality)
}
} else {
requestLocationPermission()
}
}
return binding.root
}
private fun hasLocationPermission() =
EasyPermissions.hasPermissions(
requireContext(),
Manifest.permission.ACCESS_FINE_LOCATION
)
private fun requestLocationPermission() {
EasyPermissions.requestPermissions(
this,
"This application cannot work without Location Permission.",
PERMISSION_LOCATION_REQUEST_CODE,
Manifest.permission.ACCESS_FINE_LOCATION
)
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
}
override fun onPermissionsDenied(requestCode: Int, perms: List<String>) {
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms.first())) {
SettingsDialog.Builder(requireActivity()).build().show()
} else {
requestLocationPermission()
}
}
override fun onPermissionsGranted(requestCode: Int, perms: List<String>) {
Toast.makeText(
requireContext(),
"Permission Granted!",
Toast.LENGTH_SHORT
).show()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment