2013-09-30 50 views
0

我使用此代碼來獲取我的當前位置的經度和緯度......但應用程序有時會崩潰。在某些手機上它正在很長的時間才能拿到的位置,同時使用GPS的其他應用獲取位置更快同一臺設備上gps連接需要時間在一些Android手機

package com.example.newproject; 

import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.view.Menu; 
import android.widget.TextView; 

public class MainActivity extends Activity implements LocationListener { 
private TextView tv; 
private static LocationManager locationMgr = null; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    tv = (TextView)findViewById(R.id.textView1); 
    locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
} 
@Override 
protected void onStop() 
{ 
    super.onStop(); 
    try { 
     locationMgr.removeUpdates(this); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    locationMgr = null; 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 
    tv.setText(""+location.getLatitude()+","+location.getLongitude()); 
} 

@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 

}

+0

更新時間LocationUpdates可能取決於各種條件如CPU速度,GPS芯片組,你的WiFi連接(如果使用wifi進行定位)等。我有興趣查看崩潰日誌。 –

回答

0

首先,你必須檢查是否位置提供商啓用例如:

boolean networkProviderEnabled=locationMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
boolean gpsProviderEnabled=locationMgr.isProviderEnabled(LocationManager.GPS_PROVIDER); 

其次,儘量也使用網絡提供快速但不那麼準確的位置,不僅是GPS衛星。

偉大的教程here

0

鎖定GPS衛星需要時間。您可以在等待GPS鎖定時使用getLastKnownLocation,或使用NETWORK_PROVIDER,這種方法更快但精度更低。

0

只是在黑暗中拍攝:在API常量中定義的位置提供程序不保證可用。我曾經歷過的代碼崩潰這樣的:

mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 

相反,嘗試選擇使用LocationManager.getBestProvider()位置提供。這將返回一個有效的位置提供程序或null,如果沒有可用的,則在請求位置更新之前測試null。見http://developer.android.com/reference/android/location/LocationManager.html#getBestProvider%28android.location.Criteria,%20boolean%29

如果您需要GPS某種原因,試試這個代碼:

if (mLocationManager.getAllProviders().indexOf(LocationManager.GPS_PROVIDER) >= 0) { 
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
} else { 
    Log.w("MainActivity", "No GPS location provider found. Location data will not be available."); 
}