以下代码适用于三星Galaxy S3(Android 4.3),但不适用于阿尔卡特One Touch Pop 2(4.5)(Android 4.4.4):
服务代码:
public class MyService extends Service{
private static LocationManager lm;
private LocationListener gpsLocationListener;
private LocationListener networkLocationListener;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
startLocation();
}
private void startLocation(){
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Log.d(TAG,"LOC " + lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER));
Toast.makeText(MyService.this,"LOC " + lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER),Toast.LENGTH_SHORT).show();
if (_.useGPS == 1)
{
gpsLocationListener = new VoidLL();
if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
5000, 0, gpsLocationListener);
}
}
if (lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
networkLocationListener = new VoidLL();
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
5000, 0, networkLocationListener);
}
}
private void stopLocation(){
if (gpsLocationListener != null)
{
lm.removeUpdates(gpsLocationListener);
}
if (networkLocationListener != null)
{
lm.removeUpdates(networkLocationListener);
}
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
stopLocation();
}
private class VoidLL implements LocationListener {
@Override
public void onLocationChanged(Location location) {
_.initializedLocation = true;
_.loc = location;
Toast.makeText(MyService.this,_.loc.toString(),Toast.LENGTH_SHORT).show();
Log.d(TAG,_.loc.toString());
}
@Override
public void onProviderDisabled(String provider) {
Log.d(TAG,"onProviderDisabled: " + provider);
}
@Override
public void onProviderEnabled(String provider) {
Log.d(TAG,"onProviderEnabled: " + provider);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
}
限制/权限:
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />