2011-03-09 135 views
0

我無法弄清楚爲什麼當GPS未啓用時,我的應用程序強制關閉。在運行之前啓用時,一切正常。一切工作正常,直到我添加LocationListener更新當前位置。我敢肯定,這簡直太荒唐了。當GPS未啓用時,應用程序強制關閉

public class GlenrochieMain extends Activity 

{ 


    @Override 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.main);  

    //GPS Functionality 

    LocationManager locationManager; 
    String context = Context.LOCATION_SERVICE; 
    locationManager = (LocationManager)getSystemService(context); 

    //Criteria for GPS 
    Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    criteria.setAltitudeRequired(false); 
    criteria.setBearingRequired(false); 
    criteria.setCostAllowed(true); 
    criteria.setPowerRequirement(Criteria.POWER_LOW); 
    String provider = locationManager.getBestProvider(criteria, true);  

    Location location = locationManager.getLastKnownLocation(provider); 
    updateWithNewLocation(location); 

    //updates location every 5second+5meters 
    locationManager.requestLocationUpdates(provider, 5000, 5, 
      locationListener); 
    } 

private final LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     updateWithNewLocation(location); 
    } 

    public void onProviderDisabled(String provider){ 
     updateWithNewLocation(null); 
    } 

    public void onProviderEnabled(String provider){ } 
    public void onStatusChanged(String provider, int status, 
           Bundle extras){ } 
    }; 

    private void updateWithNewLocation(Location location) { 
    String latLongString; 
    TextView myLocationText; 
    myLocationText = (TextView)findViewById(R.id.myLocationText); 
    if (location != null) { 
     double lat = location.getLatitude(); 
     double lng = location.getLongitude(); 
     latLongString = "Lat:" + lat + "\nLong:" + lng; 
    } else { 
     latLongString = "No location found"; 
    } 
    myLocationText.setText("Your Current Location is:\n" + 
          latLongString); 
    } 
} 
+0

您可以粘貼強制關閉的異常嗎? – srinathhs 2011-03-09 04:14:51

+0

什麼在日誌中?你的設備是否有SIM卡,在這種情況下,當GPS關閉時將沒有提供商? – bhups 2011-03-09 04:15:27

回答

0
String provider = locationManager.getBestProvider(criteria, true); 

當找不到合適的提供者時,getBestProvider將返回null。你還沒有處理過這種情況。

+0

你能解釋一下我需要改變以解決這個問題嗎? – Kal 2011-03-09 19:22:29

+0

之後,檢查'provider'是否爲空。如果是這樣,請求用戶啓用gps /打開gps啓用對話框。如果它爲null,則不能調用'getLastKnownLocation' – 2011-03-10 03:22:27