Aktuellen Standort des Benutzers abrufen - Kotlin

Anna

Leute, ich versuche, den Standort des Benutzers zu ermitteln, aber es stimmt etwas nicht. Wenn ich meine App ausführe, gibt es kein Spielersymbol und der Standort ist falsch - es wird immer noch lat = 0.0, lon = 0.0 angezeigt. Ich benutze keinen Emulator, ich teste die App auf meinem Handy (Android 4.4.2 falls es darauf ankommt). Bitte schau dir meinen Code an, vielleicht kann ich einfach keinen Fehler erkennen. Danke im Voraus!

class MapsActivity : FragmentActivity(), OnMapReadyCallback {

private var mMap: GoogleMap? = null

private val USER_LOCATION_REQUEST_CODE = 1000

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_maps)
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    val mapFragment = supportFragmentManager
        .findFragmentById(R.id.map) as SupportMapFragment
    mapFragment.getMapAsync(this)

    requestLocationPermission()
}

/**
 * Manipulates the map once available.
 * This callback is triggered when the map is ready to be used.
 * This is where we can add markers or lines, add listeners or move the camera. In this case,
 * we just add a marker near Sydney, Australia.
 * If Google Play services is not installed on the device, the user will be prompted to install
 * it inside the SupportMapFragment. This method will only be triggered once the user has
 * installed Google Play services and returned to the app.
 */
override fun onMapReady(googleMap: GoogleMap) {
    mMap = googleMap
}

//ask permission
private fun requestLocationPermission() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) !=
            PackageManager.PERMISSION_GRANTED) {

            requestPermissions(
                arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
                USER_LOCATION_REQUEST_CODE
            )
        }
    }
}


fun GetPlayerLocation() {
    Toast.makeText(this, "User location access on", Toast.LENGTH_LONG).show()

    var playerLocation = PlayerLocationListener()

    var locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3, 3f, playerLocation)

    var mythread = myThread()
    mythread.start()
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {

    when (requestCode) {

        USER_LOCATION_REQUEST_CODE -> {

            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                GetPlayerLocation()
            } else {
                Toast.makeText(this, "We cannot access to your location", Toast.LENGTH_LONG).show()
            }
        }
    }
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
}

var location: Location? = null

// Get player location
inner class PlayerLocationListener : LocationListener {

    constructor() {
        location = Location("Start")
        location!!.latitude = 0.0
        location!!.longitude = 0.0
    }

    override fun onStatusChanged(p0: String?, p1: Int, p2: Bundle?) {
    }

    override fun onProviderEnabled(p0: String?) {
    }

    override fun onProviderDisabled(p0: String?) {
    }

    override fun onLocationChanged(p0: Location?) {
        location = p0
    }

}

inner class myThread : Thread {
    constructor() : super(){

    }
    override fun run() {

        while (true) {

            try {
                runOnUiThread {

                    mMap!!.clear()
                    val sydney = LatLng(location!!.latitude, location!!.longitude)
                    mMap!!.addMarker(
                        MarkerOptions().position(sydney).title("Hi!")
                            .snippet("Let's go!")
                            .icon(BitmapDescriptorFactory.fromResource(R.drawable.player)))
                    mMap!!.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 14f))
                }
                Thread.sleep(1000)

            } catch (ex: Exception) {
            }
        }
    }

}

}

`

IramML

versuche es so

diese Abhängigkeit schrittweise implementieren

implementation 'com.google.android.gms:play-services:11.4.0'
implementation 'com.google.android.gms:play-services-maps:11.4.0'

verwendet die Erlaubnis in Ihrem AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

eine locationListenerSchnittstelle erstellen

interface locationListener {
    fun locationResponse(locationResult: LocationResult)
}

dann erstelle eine Location.ktKlasse

class Location (var activity: AppCompatActivity, locationListener: locationListener){
    private val permissionFineLocation=android.Manifest.permission.ACCESS_FINE_LOCATION
    private val permissionCoarseLocation=android.Manifest.permission.ACCESS_COARSE_LOCATION

    private val REQUEST_CODE_LOCATION=100

    private var fusedLocationClient: FusedLocationProviderClient?=null

    private var locationRequest: LocationRequest?=null
    private var callbabck: LocationCallback?=null
    init {
        fusedLocationClient= FusedLocationProviderClient(activity.applicationContext)

        inicializeLocationRequest()
        callbabck=object: LocationCallback(){
            override fun onLocationResult(p0: LocationResult?) {
                super.onLocationResult(p0)

                locationListener.locationResponse(p0!!)
            }
        }
    }

    private fun inicializeLocationRequest() {
        locationRequest= LocationRequest()
        locationRequest?.interval=50000
        locationRequest?.fastestInterval=5000
        locationRequest?.priority=LocationRequest.PRIORITY_HIGH_ACCURACY
    }
    private fun validatePermissionsLocation():Boolean{
        val fineLocationAvailable= ActivityCompat.checkSelfPermission(activity.applicationContext, permissionFineLocation)== PackageManager.PERMISSION_GRANTED
        val coarseLocationAvailable=ActivityCompat.checkSelfPermission(activity.applicationContext, permissionCoarseLocation)==PackageManager.PERMISSION_GRANTED

        return fineLocationAvailable && coarseLocationAvailable
    }
    private fun requestPermissions(){
        val contextProvider=ActivityCompat.shouldShowRequestPermissionRationale(activity, permissionFineLocation)

        if(contextProvider){
            Toast.makeText(activity.applicationContext, "Permission is required to obtain location", Toast.LENGTH_SHORT).show()
        }
        permissionRequest()
    }
    private fun permissionRequest(){
        ActivityCompat.requestPermissions(activity, arrayOf(permissionFineLocation, permissionCoarseLocation), REQUEST_CODE_LOCATION)
    }
    fun onRequestPermissionsResult(requestCode:Int, permissions:Array<out String>, grantResults:IntArray){
        when(requestCode){
            REQUEST_CODE_LOCATION->{
                if(grantResults.size>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
                    getLocation()
                }else{
                    Toast.makeText(activity.applicationContext, "You did not give permissions to get location", Toast.LENGTH_SHORT).show()
                }
            }
        }
    }
    fun stopUpdateLocation(){
        this.fusedLocationClient?.removeLocationUpdates(callbabck)
    }
    fun inicializeLocation(){
        if (validatePermissionsLocation()){
            getLocation()
        }else{
            requestPermissions()
        }
    }
    @SuppressLint("MissingPermission")
    private fun getLocation() {
        validatePermissionsLocation()
        fusedLocationClient?.requestLocationUpdates(locationRequest, callbabck, null)
    }
}

Verwendung

class MapsActivity : AppCompatActivity(), OnMapReadyCallback {
    var location: Location?=null
    private var mMap: GoogleMap? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_maps)
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        val mapFragment = supportFragmentManager
            .findFragmentById(R.id.map) as SupportMapFragment
        mapFragment.getMapAsync(this)
        location= Location(this, object :locationListener{
            override fun locationResponse(locationResult: LocationResult) {
                mMap?.clear()
                val sydney = LatLng(locationResult.lastLocation.latitude, locationResult.lastLocation.longitude)
                mMap?.addMarker(MarkerOptions().position(sydney).title("Hi").snippet("Let's go!"))
                mMap?.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 14f))
            }
        })

    }

    override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        location?.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }
    override fun onStart() {
        super.onStart()
        location?.inicializeLocation()
    }
    override fun onPause() {
        super.onPause()
        location?.stopUpdateLocation()
    }
}

Ich hoffe das hilft dir

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Abrufen des aktuellen Benutzers in AngularFireAuth

Wie kann die Google Maps-API den aktuellen Standort des Benutzers abrufen, um ihn in der Datenbank zu speichern?

Entfernung des Standortes des Benutzers von meinem aktuellen Standort

SwiftUI: Wie erhalte ich den aktuellen Standort des Benutzers?

Zeichnen von MKPolyline, die dem aktuellen Standort des Benutzers folgt

Fehler beim Versuch, den aktuellen Standort des Benutzers in Dialogflow abzurufen

MapKit-Zoom auf den aktuellen Standort des Benutzers

Polylinien in Mapview basierend auf dem aktuellen Standort des Benutzers zeichnen?

So erhalten Sie den aktuellen Standort des Benutzers in Android

Aktuellen Standort des Benutzers automatisch in eine SMS aufnehmen (Swift)

Abrufen der ObjectGUID des aktuellen Benutzers

MVC Inhalte des aktuellen Benutzers abrufen

Swift 4, Xcode 9: Standort des Benutzers abrufen und anzeigen

Pfadvariable des aktuellen Benutzers ohne Systempfad mit cmd abrufen

Vor- und Nachname des aktuellen Windows-Benutzers abrufen?

Das Abrufen des aktuellen IShellView-Benutzers interagiert mit

Lotus Notes - Mail-Datenbank des aktuellen Benutzers abrufen

Abrufen des aktuellen Benutzers mit Django drf und einfachem jwt

Anzeigen von Feldern basierend auf dem aktuellen Standort des Benutzers in Microsoft Power BI

Rufen Sie den aktuellen Standort des Benutzers mit SwiftUI und MapKit ab

Was ist der einfachste und robusteste Weg, um den aktuellen Standort des Benutzers auf Android zu ermitteln?

Was ist der einfachste und beste Weg, um den aktuellen Standort des Benutzers auf Android zu ermitteln?

Routenrichtung zwischen dem aktuellen Standort des Benutzers und dem Ziel in der iOS-App zeichnen?

SwiftUI-Mapkit setzt die Region auf den aktuellen Standort des Benutzers

So verfolgen Sie den Standort des aktuellen Facebook-Benutzers IOS / Android

Festlegen der Karte zusammen mit dem aktuellen Standort des Benutzers für osx

So erhalten Sie den aktuellen Standort des Benutzers mit lat und long

So fügen Sie den aktuellen Standort des Benutzers in ng-autocomplete hinzu

So zeigen Sie den aktuellen Standort des Benutzers an, während Sie meine App öffnen

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  3. 3

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  4. 4

    Eclipse Oxygen - Projekte verschwinden

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Wie kann ich den Kaskadenmodus global einstellen?

  7. 7

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  8. 8

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  9. 9

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  10. 10

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  11. 11

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  12. 12

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  13. 13

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  14. 14

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  15. 15

    Wie wählt man Unterschiede mit drei Tabellen aus?

  16. 16

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

  17. 17

    Wie kann ich meine Tabelle abfragen, um sie in mySQL nach 2 Feldern zu gruppieren?

  18. 18

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  19. 19

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  20. 20

    Modbus Python Schneider PM5300

  21. 21

    Wie kann eine gleichmäßige Lastverteilung in ElasticSearch mit Indizes mit unterschiedlicher Anzahl von Shards erreicht werden?

heißlabel

Archiv