package com.example.
phone_tracker
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.location.Location
import android.os.Bundle
import android.provider.Settings
import android.util.Log
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import com.google.android.gms.location.*
class MainActivity : AppCompatActivity() {
private lateinit var fusedLocationClient: FusedLocationProviderClient
private lateinit var locationText: TextView
private val LOCATION_PERMISSION_REQUEST_CODE = 1001
private val TAG = "PhoneTracker"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
locationText = findViewById(R.id.locationText)
val getLocationBtn = findViewById<Button>(R.id.getLocationBtn)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
getLocationBtn.setOnClickListener {
checkLocationPermission()
private fun checkLocationPermission() {
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
){
// Request permissions
ActivityCompat.requestPermissions(
this,
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
),
LOCATION_PERMISSION_REQUEST_CODE
} else {
// Permissions granted
checkLocationSettings()
private fun checkLocationSettings() {
val locationRequest = LocationRequest.create()
.setPriority(Priority.PRIORITY_HIGH_ACCURACY)
val builder = LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest)
.setAlwaysShow(true)
val client = LocationServices.getSettingsClient(this)
val task = client.checkLocationSettings(builder.build())
task.addOnSuccessListener {
getCurrentLocation()
task.addOnFailureListener {
Toast.makeText(this, "Please turn on location services", Toast.LENGTH_LONG).show()
val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
startActivity(intent)
private fun getCurrentLocation() {
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
){
Toast.makeText(this, "Location permission not granted", Toast.LENGTH_SHORT).show()
return
fusedLocationClient.getCurrentLocation(Priority.PRIORITY_HIGH_ACCURACY, null)
.addOnSuccessListener { location: Location? ->
if (location != null) {
val result = "Latitude: ${location.latitude}\nLongitude: ${location.longitude}"
locationText.text = result
Log.d(TAG, result)
} else {
locationText.text = "Location is null"
Log.e(TAG, "Location is null")
}
}.addOnFailureListener {
locationText.text = "Failed to get location: ${it.message}"
Log.e(TAG, "Error: ${it.message}")
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
){
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == LOCATION_PERMISSION_REQUEST_CODE &&
grantResults.isNotEmpty() &&
grantResults[0] == PackageManager.PERMISSION_GRANTED
){
checkLocationSettings()
} else {
Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show()
}
package com.example.phone_tracker
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.location.Location
import android.os.Bundle
import android.provider.Settings
import android.util.Log
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import com.google.android.gms.location.*
class MainActivity : AppCompatActivity() {
private lateinit var fusedLocationClient: FusedLocationProviderClient
private lateinit var locationText: TextView
private val locationPermissionRequestCode = 1001
private val tag = "PhoneTracker"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
locationText = findViewById(R.id.locationText)
val getLocationBtn = findViewById<Button>(R.id.getLocationBtn)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
getLocationBtn.setOnClickListener {
checkLocationPermission()
private fun checkLocationPermission() {
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
){
ActivityCompat.requestPermissions(
this,
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
),
locationPermissionRequestCode
)
} else {
checkLocationSettings()
private fun checkLocationSettings() {
val locationRequest = LocationRequest.create().apply {
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
val builder = LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest)
.setAlwaysShow(true)
val client = LocationServices.getSettingsClient(this)
val task = client.checkLocationSettings(builder.build())
task.addOnSuccessListener {
getLastKnownLocation()
task.addOnFailureListener {
Toast.makeText(this, "Please turn on location services", Toast.LENGTH_LONG).show()
val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
startActivity(intent)
private fun getLastKnownLocation() {
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
){
Toast.makeText(this, "Permission not granted", Toast.LENGTH_SHORT).show()
return
fusedLocationClient.lastLocation.addOnSuccessListener { location: Location? ->
if (location != null) {
val lat = location.latitude
val lon = location.longitude
val locationString = "Lat: $lat\nLon: $lon"
locationText.text = locationString
Log.d(tag, locationString)
} else {
locationText.text = "Location not found"
Log.w(tag, "Location is null")
}
}.addOnFailureListener { e ->
locationText.text = "Error getting location: ${e.message}"
Log.e(tag, "Location error: ${e.message}")
override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array<out String>, grantResults: IntArray
){
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == locationPermissionRequestCode &&
grantResults.isNotEmpty() &&
grantResults[0] == PackageManager.PERMISSION_GRANTED
){
checkLocationSettings()
} else {
Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show()