Created
April 22, 2021 06:42
-
-
Save stevdza-san/d1ef6b7a29f6a06c6cf9b64f63b433b3 to your computer and use it in GitHub Desktop.
For my Fused Location Provider API video tutorial on YouTube
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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