em kotlin: gps primeira versão
ficheiro: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="pt.isec.estuda.amov_gpsv1"> <!-- pedir estas permissões --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Amov_gpsv1"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
ficheiro: MainActivity.kt
package pt.isec.estuda.amov_gpsv1 import android.Manifest import android.content.pm.PackageManager import android.location.Location import android.location.LocationListener import android.location.LocationManager import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import androidx.core.app.ActivityCompat const val TAG = "Location" class MainActivity : AppCompatActivity(), LocationListener { lateinit var locationM : LocationManager var locEnable = false //caso não ajam permissões override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) locationM = getSystemService(LOCATION_SERVICE) as LocationManager } override fun onResume() { super.onResume() startLocationServices(true) //para poupanças de energia, ativar o mais tarde possivel } override fun onPause() { super.onPause() //para poupanças de energia, desactivar o mais cedo possivel if(locEnable) { locationM.removeUpdates(this) locEnable = false } } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) //se tivermos as permissões //locationM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 100f, this) if(requestCode == 1289) { startLocationServices(false) } } fun startLocationServices(askPerm : Boolean){ //1ºprovider, 2º intervalo de segundos,3º distancia minima ,4º o listener //se for for telemovel NETWORK_PROVIDER //dar permissões: ACCESS_FINE_LOCATION //e pedir em runtime, add permissions check if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { //pedir as permissões //&& ou || if(askPerm) { ActivityCompat.requestPermissions(this, arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION), 1289) //1289 um valor qualquer! }else{ finish() } return } locationM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 100f, this) locEnable = true //outras: //addProximityAlert, funções de proximidade para um determinado local //addNmeaListener, ir buscar as mensagens de baixo nivel que um chip gps consegue obter //requestSingleUpdate, ir buscar apenas um update(uma localização armazenada) //getLastKnownLocation, obter um objeto Location, obtemos logo uma localização mesmo que não seja correta //providers, acerca dos requisitos da rede } override fun onLocationChanged(location: Location) { val latitude = location.latitude val longitude = location.longitude Log.i(TAG, "onLocationChanged: $latitude $longitude") //a ver o location.distanceTo() } }
Tags : amov, android, arquitecturas móveis (kotlin), gps, kotlin, Learn android, t2021
0 thoughts on “em kotlin: gps primeira versão”