在某些设备上永远不会调用LocationListener onLocationChanged

时间:2015-01-03 13:26:19

标签: java android

以下代码适用于三星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" />

0 个答案:

没有答案