2014-12-02 71 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); 
相關問題