获取最后一个位置不会返回位置

Posted

技术标签:

【中文标题】获取最后一个位置不会返回位置【英文标题】:get last location won't return location 【发布时间】:2016-09-23 15:12:12 【问题描述】:

我无法返回最后一个已知位置并调用 addMarker。这是说我的错误堆栈中没有请求适当的 API。这是一个大程序,所以我只是把重要的部分放在这里:

public LatLng getLastKnownLocation() 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
    
    Location lastLocation = FusedLocationApi.getLastLocation(client);
    return new LatLng(lastLocation.getLatitude(),lastLocation.getLongitude());


调用自:

mMap.addMarker(newMarkerOptions().position(getLastKnownLocation()).title(memoryString));

我的错误:

23126-23126/com.example.kevin.memories E/androidRuntime: 致命异常: main 进程:com.example.kevin.memories,PID:23126 java.lang.NullPointerException:未请求适当的 Api。 在 com.google.android.gms.common.internal.zzaa.zzb(未知来源) 在 com.google.android.gms.internal.zzof.zza(未知来源) 在 com.google.android.gms.location.LocationServices.zzi(未知来源) 在 com.google.android.gms.location.internal.zzd.getLastLocation(未知来源) 在 com.example.kevin.memories.MapsActivity.getLastKnownLocation(MapsActivity.java:134) 在 com.example.kevin.memories.MapsActivity.onMapReady(MapsActivity.java:107) 在 com.google.android.gms.maps.SupportMapFragment$zza$1.zza(未知来源) 在 com.google.android.gms.maps.internal.zzo$zza.onTransact(未知来源) 在 android.os.Binder.transact(Binder.java:380) 在 wv.a(:com.google.android.gms.DynamiteModulesB:82) 在 maps.ag.t$5.run(未知来源) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java:5835) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 23126-23745/com.example.kevin.memories E/DynamiteModule:无法加载模块描述符类:找不到类“com.google.android.gms.dynamite.descriptors.com.google.android.gms.googlecertificates.路径上的 ModuleDescriptor":DexPathList[[zip file "/data/app/com.example.kevin.memories-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

我错过了什么吗?

@Override
    protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    Toolbar toolbar = (Toolbar) findViewById(R.id.login_toolbar);
    toolbar.setTitle("Login");

    if (client == null) 
        GoogleApiClient client = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        loginButtons();
    
    loadMap();

【问题讨论】:

您是否在 Manifest XML 文件中添加了所有必需的权限? 是的,我有@kv.333 我已经更新了帖子,并且还对其进行了处理。我很确定我的 GoogleApiClient 由于未知原因返回 null 【参考方案1】:

我收到相同的日志错误here 在我的情况下,GoogleApiClient 没有返回 null。获得非空最后位置没有问题。我用祝酒词验证了这一点。我唯一的问题是永远不会调用标记显示代码。如果您的客户仍然返回空值,请查看我的实现。 这是为了获取最后一个位置。日志错误本身的解决方案是downgrading 9.0.83 Google Play Services。

【讨论】:

以上是关于获取最后一个位置不会返回位置的主要内容,如果未能解决你的问题,请参考以下文章

如何返回最后一个字符出现的位置?

为啥Android会在“新鲜”位置之后返回“陈旧”位置?

C++ 函数不会返回

使用 FusedLocationProviderClient 获取按钮单击的最后一个已知位置

如何获取当前 GPS 位置? (最后不知道)

Android FusedLocationProviderClient.requestLocationUpdates()返回相同的位置坐标。