2014-12-02 43 views
0

如果手机上的所有内容都已关闭,我有一个获取位置的问题,这种方式我应该显示该用户应该启用GPS,但事情是我应该在哪里呼叫显示对话?当没有启用其他位置服务时启用GPS

这里是我的代码:

Criteria c = new Criteria(); 

      location = locationManager.getLastKnownLocation(locationManager.getBestProvider(c, false)); 

      Log.v("--", "provider " + locationManager.getBestProvider(c, false)); 
      if (location == null) { 
       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, 1000, 1000, mLocationListener); 

      } 

的事情是,有时if(location == null)是真实的,locationManager.requestLocationUpdates犯规执行。我如何检查它是否执行?我的猜测是我应该在这里显示启用GPS对话框?有人可以给我一个指导吗?

回答

0

我亲自检查位置服务是否启用与否,当用户点击按钮myLocation上图:

googleMap.setOnMyLocationButtonClickListener(new OnMyLocationButtonClickListener() { 

       @Override 
       public boolean onMyLocationButtonClick() { 

        LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE); 

        boolean enabledGPS = service 
          .isProviderEnabled(LocationManager.GPS_PROVIDER); 
        boolean enabledWiFi = service 
          .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

        if (!enabledGPS) { 

         Toast.makeText(getApplicationContext(), 
           "GPS signal not found", Toast.LENGTH_LONG) 
           .show(); 
         Intent intent = new Intent(
           Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
         startActivity(intent); 

        } else if (!enabledWiFi) { 

         Toast.makeText(getApplicationContext(), 
           "Network signal not found", 
           Toast.LENGTH_LONG).show(); 
         Intent intent = new Intent(
           Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
         startActivity(intent); 

        } 

        return false; 
       } 
      }); 

是你想要的吗?

0

当你调用requestLocationUpdates(...),创造以及一个计时器,将位置更新后过期了一点,所以你可以检查是否位置更新被称为与否:

private static boolean hasUpdateHappened = false; 
... 

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1000, mLocationListener); 
// mLocationListener should set hasUpdateHappened to true 
... 
myView.postDelayed(new Runnable() { 
@Override 
    public void run() { 
     if (!hasUpdateHappened){ 
      //TODO Show dialog 
     } 
    } 
}, 2000);