Search in sources :

Example 1 with PendingResult

use of com.google.android.gms.common.api.PendingResult in project RSAndroidApp by RailwayStations.

the class NearbyNotificationService method startLocationUpdates.

private void startLocationUpdates() {
    LocationRequest locationRequest = new LocationRequest().setInterval(2 * FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS).setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS).setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(locationRequest);
    PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
    AsyncTask<PendingResult<LocationSettingsResult>, Void, Boolean> task = new AsyncTask<PendingResult<LocationSettingsResult>, Void, Boolean>() {

        @Override
        @SafeVarargs
        protected final Boolean doInBackground(PendingResult<LocationSettingsResult>... pendingResults) {
            com.google.android.gms.common.api.Status status = pendingResults[0].await().getStatus();
            int statusCode = status.getStatusCode();
            return statusCode == LocationSettingsStatusCodes.SUCCESS || statusCode == LocationSettingsStatusCodes.SUCCESS_CACHE;
        }

        @Override
        protected final void onPostExecute(Boolean success) {
            super.onPostExecute(success);
            if (!success) {
                Log.e(TAG, "Device settings unsuitable for location");
                Toast.makeText(NearbyNotificationService.this, R.string.no_location_enabled, Toast.LENGTH_LONG).show();
                stopSelf();
            }
        }
    };
    //noinspection unchecked
    task.execute(result);
    try {
        LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
    } catch (SecurityException se) {
        Log.e(TAG, "Still no permission for location services");
        Toast.makeText(this, "Bitte einmal \"in der Nähe\" aufrufen", Toast.LENGTH_LONG).show();
        stopSelf();
    }
}
Also used : LocationRequest(com.google.android.gms.location.LocationRequest) LocationSettingsResult(com.google.android.gms.location.LocationSettingsResult) AsyncTask(android.os.AsyncTask) PendingResult(com.google.android.gms.common.api.PendingResult) LocationSettingsRequest(com.google.android.gms.location.LocationSettingsRequest)

Example 2 with PendingResult

use of com.google.android.gms.common.api.PendingResult in project IITB-App by wncc.

the class MapFragment method onStart.

@Override
public void onStart() {
    super.onStart();
    locationButton = (FloatingActionButton) getActivity().findViewById(R.id.location_button);
    locationButton.setImageResource(R.drawable.ic_my_location_black_24dp);
    locationButton.getDrawable().setColorFilter(ContextCompat.getColor(getContext(), R.color.colorPrimaryDark), PorterDuff.Mode.SRC_IN);
    locationButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.v("MapFragment", "Location button pressed");
            try {
                LocationManager lm = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
                boolean gps_enabled = false;
                boolean network_enabled = false;
                if (ActivityCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(getActivity(), new String[] { Manifest.permission.ACCESS_COARSE_LOCATION }, MY_PERMISSIONS_REQUEST_LOCATION);
                    return;
                }
                try {
                    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
                } catch (Exception ex) {
                }
                try {
                    network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
                } catch (Exception ex) {
                }
                if (!gps_enabled && !network_enabled) {
                    LocationRequest locationRequest = LocationRequest.create();
                    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
                    locationRequest.setInterval(30 * 1000);
                    locationRequest.setFastestInterval(5 * 1000);
                    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(locationRequest);
                    // **************************
                    // this is the key ingredient
                    builder.setAlwaysShow(true);
                    // **************************
                    PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
                    result.setResultCallback(new ResultCallback<LocationSettingsResult>() {

                        @Override
                        public void onResult(LocationSettingsResult result) {
                            final Status status = result.getStatus();
                            final LocationSettingsStates state = result.getLocationSettingsStates();
                            switch(status.getStatusCode()) {
                                case LocationSettingsStatusCodes.SUCCESS:
                                    // requests here.
                                    break;
                                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                                    // a dialog.
                                    try {
                                        // Show the dialog by calling startResolutionForResult(),
                                        // and check the result in onActivityResult().
                                        status.startResolutionForResult(getActivity(), 1000);
                                    } catch (IntentSender.SendIntentException e) {
                                    // Ignore the error.
                                    }
                                    break;
                                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                                    // settings so we won't show the dialog.
                                    break;
                            }
                        }
                    });
                }
                currentLocation = getLastKnownLocation();
                if (currentLocation != null) {
                    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude()), 17);
                    googleMap.animateCamera(cameraUpdate);
                    locationButton.getDrawable().setColorFilter(ContextCompat.getColor(getContext(), R.color.colorPrimary), PorterDuff.Mode.SRC_IN);
                }
            } catch (Exception e) {
                checkLocationPermission();
                Toast.makeText(getContext(), "Please turn on Location from the Settings", Toast.LENGTH_SHORT).show();
            }
        }
    });
}
Also used : LocationManager(android.location.LocationManager) Status(com.google.android.gms.common.api.Status) ResultCallback(com.google.android.gms.common.api.ResultCallback) LocationRequest(com.google.android.gms.location.LocationRequest) LocationSettingsResult(com.google.android.gms.location.LocationSettingsResult) LocationSettingsStates(com.google.android.gms.location.LocationSettingsStates) View(android.view.View) PendingResult(com.google.android.gms.common.api.PendingResult) LatLng(com.google.android.gms.maps.model.LatLng) IntentSender(android.content.IntentSender) CameraUpdate(com.google.android.gms.maps.CameraUpdate)

Aggregations

PendingResult (com.google.android.gms.common.api.PendingResult)2 LocationRequest (com.google.android.gms.location.LocationRequest)2 LocationSettingsResult (com.google.android.gms.location.LocationSettingsResult)2 IntentSender (android.content.IntentSender)1 LocationManager (android.location.LocationManager)1 AsyncTask (android.os.AsyncTask)1 View (android.view.View)1 ResultCallback (com.google.android.gms.common.api.ResultCallback)1 Status (com.google.android.gms.common.api.Status)1 LocationSettingsRequest (com.google.android.gms.location.LocationSettingsRequest)1 LocationSettingsStates (com.google.android.gms.location.LocationSettingsStates)1 CameraUpdate (com.google.android.gms.maps.CameraUpdate)1 LatLng (com.google.android.gms.maps.model.LatLng)1