em kotlin: gps segunda versão
Adicionar uma dependência via menus no build-gradle (module)
(1)
(2)
(3)
ficheiro: build-gradle(module)
... dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'com.google.android.gms:play-services-location:17.1.0' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' }
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 import com.google.android.gms.location.* const val TAG = "Location" class MainActivity : AppCompatActivity() { var locEnable = false //caso não ajam permissões lateinit var fLoc : FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) fLoc = FusedLocationProviderClient(this) } 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) { 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 } val locRequest = LocationRequest().apply { interval = 4000 priority = LocationRequest.PRIORITY_HIGH_ACCURACY //ocultar para ja estes dois: //fastestInterval = 2000 //maxWaitTime = 10000 //numUpdates /? a ver, quantidade de updates } //activar locEnable = true fLoc.requestLocationUpdates(locRequest, locationCallBack, null) } } //função locationCallBack var locationCallBack = object : LocationCallback() { override fun onLocationResult(p0: LocationResult?) { Log.i(TAG, "onLocationAvailability: ") //locations é uma lista de localizações p0?.locations?.forEach { Log.i(TAG, "onLocationAvailability: ${it.latitude} ${it.longitude}") } } }
Com esta versão são feitos updates mais rapidamente, com a ajuda do LocationRequest.PRIORITY_HIGH_ACCURACY
este é o método recomendado pela google..
Tags : amov, android, arquitecturas móveis (kotlin), gps, kotlin, Learn android, t2021
0 thoughts on “em kotlin: gps segunda versão”