Android谷歌地图Api v2当前位置空

时间:2015-03-25 06:57:05

标签: android null maps

Good Day.Im尝试使用map.getMyLocation()获取当前位置但是我肯定得到NullPointerException,因为我的位置暂时没有加载。所以我正在进行MapReady检查和MapLoaded检查哪两个触发一旦地图准备好并加载,但不幸的是我的当前位置,似乎我永远不知道它何时可用。这是我的代码片段,我可能会做正常的空检查。

            @Override
                    public void onMapLoaded() {
        //here my map is loaded so this triggers.
    if(map.getMyLocation()!=null){
//do something here. 

    }
        }

但似乎我的空检查永远不会正常工作,因为一旦我上面写的方法触发它不等待我的if条件它只是检查它是否满足我的if条件只是越过它所以我的if条件永远不会触发。问题是如何在我的位置启用时收到通知?我甚至尝试将其置于while()的循环中但如果我在UI thread上它会冻结,并且如果我在THREAD执行任何操作都不会让我做任何事情我在MainThread做了谷歌地图需要在NULL完成。所以接下来我的问题是,在世界上如何通知我的位置是否为空?我怎么能触发一段代码一旦不是{{1}}?

1 个答案:

答案 0 :(得分:0)

我在我的应用程序中使用此代码..
尝试在你的应用程序中实现这个

//Global Declaration
    GoogleMap googleMap;
        LocationManager locationManager;
        Location location;
        CameraUpdate cameraUpdate;

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

                        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

                            location = googleMap.getMyLocation();
                            if (location != null) {
                                LatLng latLang = new LatLng(location.getLatitude(), location.getLongitude());
                                cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLang, 17);
                                googleMap.animateCamera(cameraUpdate);
                            } else {

                                AlertDialog.Builder builder = new AlertDialog.Builder(MapScreen.this);
                                builder.setTitle("Warning");
                                builder.setMessage("Location Not Found...!!!");
                                builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {

                                    }
                                }).show();
                            }
                        } else {
                            showAlertDialog();


        }

private void showAlertDialog() {

        AlertDialog.Builder builder = new AlertDialog.Builder(MapScreen.this);
        builder.setTitle("Warning");
        builder.setMessage("Device GPS is currently OFF. Please Turn ON.");
        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        }).show();

    }