【问题标题】:Unable to set device location无法设置设备位置
【发布时间】:2020-09-03 16:12:31
【问题描述】:

运行以下代码时出现此错误:

None of the following functions can be called with the arguments supplied: 
public constructor FusedLocationProviderClient(p0: Activity) defined in com.google.android.gms.location.FusedLocationProviderClient
public constructor FusedLocationProviderClient(p0: Context) defined in com.google.android.gms.location.FusedLocationProviderClient

代码:

import android.location.Location
import android.os.Build
import android.os.SystemClock
import com.google.android.gms.location.FusedLocationProviderClient

class startMockLocation {

    fun main() {
        var locationProvider = FusedLocationProviderClient() // I GET THE ERROR HERE
        locationProvider.setMockMode(true)

        val loc = Location("gps")
        val mockLocation = Location("gps") // a string
        mockLocation.latitude = 48.8566  // double
        mockLocation.longitude = 2.3522
        mockLocation.altitude = loc.altitude
        mockLocation.time = System.currentTimeMillis()
        mockLocation.accuracy = 1f
        mockLocation.elapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos()
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            mockLocation.bearingAccuracyDegrees = 0.1f
            mockLocation.verticalAccuracyMeters = 0.1f
            mockLocation.speedAccuracyMetersPerSecond = 0.01f
        }
//        locationManager.setTestProviderLocation(providerName, mockLocation)
        locationProvider.setMockLocation(mockLocation)
    }
}

如何解决此错误?我只是想将设备的位置设置为给定的坐标。我也遇到了更多问题,但这是主要错误。

【问题讨论】:

    标签: android kotlin fusedlocationproviderapi android-fusedlocation


    【解决方案1】:

    您需要将当前活动上下文作为参数传递:

    var locationProvider = FusedLocationProviderClient(this);
    

    错误是说您可以使用 2 个构造函数,其中一个传递了一个 Activity:

    FusedLocationProviderClient(p0: Activity)
    

    还有一个通过了上下文:

    FusedLocationProviderClient(p0: Context)
    

    如果这不起作用,您也可以试试这个,我发现它使用得更频繁。我不确定这两种方法之间的区别:

    var locationProvider = LocationServices.getFusedLocationProviderClient(this);
    

    【讨论】:

    • 我现在收到错误Type mismatch: inferred type is startMockLocation but Activity was expected
    • 试试这个@startMockLocation
    • 我现在得到'startMockLocation' is not an annotation class
    • 我的 android studio 项目的其余部分在 Java 中
    • 啊,这改变了它。您需要能够传递上下文或活动。 getApplicationContext() 可能会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2019-11-06
    • 1970-01-01
    相关资源
    最近更新 更多