LocationListner в Android - PullRequest
       2

LocationListner в Android

0 голосов
/ 26 октября 2019

Я много пробовал, но мой код не работает, пожалуйста, помогите с ним .. Он не показывает никаких ошибок, и служба определения местоположения также не работает .. Пожалуйста, помогите с проблемой

 public class MyService extends Service {

    public LocationManager mLocationManager;
    public LocationListener mLocationListener;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");

    }

    @SuppressLint("MissingPermission")
    public void onCreate(){

        mLocationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                Toast.makeText(getApplicationContext(),"test",Toast.LENGTH_SHORT).show();

        Toast.makeText(MyService.this, ""+ location.getLatitude(),Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {

            }

            @Override
            public void onProviderEnabled(String provider) {

            }

            @Override
            public void onProviderDisabled(String provider) {

                Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(i);

            }
        };
        mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,3000,0,mLocationListener);

    }
}}

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Если вы хотите постоянно проверять, включен ли gps или нет, используйте следующий код:

Шаг 1: Добавьте службу в манифесте

<service android:name=".services.GPSService"
         android:enabled="true"
         android:exported="true" />

Шаг 2: Ваша служба будет выглядеть так:

public class GPSService extends Service {
    private static final String PACKAGE_NAME = GPSService.class.getPackage().getName();
    public static final String ACTION_BROADCAST = PACKAGE_NAME + ".broadcast";
    public static final String EXTRA_GPS_STATE = PACKAGE_NAME + ".location";

    private static final String TAG = "BOOMBOOMTESTGPS";
    private LocationManager mLocationManager = null;
    private static final int LOCATION_INTERVAL = 1000;
    private static final float LOCATION_DISTANCE = 10f;


    public GPSService() {
        Log.d(TAG, "GPSService: "); }

    private class LocationListener implements android.location.LocationListener{

        Location mLastLocation;

        public LocationListener(String provider) {
            mLastLocation = new Location(provider);
        }

        @Override
        public void onLocationChanged(Location location) {
            mLastLocation.set(location);
        }

        @Override
        public void onProviderDisabled(String provider) {
            Toast.makeText(getApplicationContext(), "Enable gps", Toast.LENGTH_SHORT).show();

            // Notify anyone listening for broadcasts about the new gps state.
            Intent intent = new Intent(ACTION_BROADCAST);
            intent.putExtra(EXTRA_GPS_STATE, provider);
            LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

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

    LocationListener[] mLocationListeners = new LocationListener[] {
            new LocationListener(LocationManager.GPS_PROVIDER),
            new LocationListener(LocationManager.NETWORK_PROVIDER)
    };

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {

        return START_STICKY;
    }

    @Override
    public void onCreate()
    {
        Log.e(TAG, "onCreate");
        initializeLocationManager();

        if (mLocationManager != null) {
            try {
                mLocationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE,
                        mLocationListeners[1]);
            } catch (SecurityException ex) {
                Log.i(TAG, "fail to request location update, ignore", ex);
            } catch (IllegalArgumentException ex) {
                Log.d(TAG, "network provider does not exist, " + ex.getMessage());
            }
            try {
                mLocationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE,
                        mLocationListeners[0]);
            } catch (SecurityException ex) {
                Log.i(TAG, "fail to request location update, ignore", ex);
            } catch (IllegalArgumentException ex) {
                Log.d(TAG, "gps provider does not exist " + ex.getMessage());
            }
        }
    }

    @Override
    public void onDestroy()
    {
        Log.e(TAG, "onDestroy");
        super.onDestroy();
        if (mLocationManager != null) {
            for (int i = 0; i < mLocationListeners.length; i++) {
                try {
                    mLocationManager.removeUpdates(mLocationListeners[i]);
                } catch (Exception ex) {
                    Log.i(TAG, "fail to remove location listners, ignore", ex);
                }
            }
        }
    }

    private void initializeLocationManager() {
        Log.e(TAG, "initializeLocationManager");
        if (mLocationManager == null) {
            mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
        }
    }
}

Шаг 3: Добавьте сервис и широковещательный прием в вашу деятельность:

private GPSStateReceiver gpsStateReceiver;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        gpsStateReceiver = new GPSStateReceiver();
        setContentView(R.layout.activity_home);
    }

    @Override
    protected void onResume() {
        super.onResume();
        Intent startGPSService = new Intent(this, GPSService.class);
        startService(startGPSService);

        LocalBroadcastManager.getInstance(this).registerReceiver(gpsStateReceiver,
                new IntentFilter(GPSService.ACTION_BROADCAST));
    }
       @Override
    protected void onPause() {
        LocalBroadcastManager.getInstance(this).unregisterReceiver(gpsStateReceiver);
        super.onPause();
    }
     @Override
    protected void onStop() {
        stopService(new Intent(this, GPSService.class));
    }

        /**
     * Receiver for broadcasts sent by {@link LocationUpdatesService}.
     */
    private class GPSStateReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            //this onReceive method will call when user disable gps

        }
    }




0 голосов
/ 26 октября 2019

сначала убедитесь, что инициализировали свою службу в манифесте и начали Intent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...