FusedAPI работает на Android Oreo и выше, но не работает на Android 6.0 (API23) - PullRequest
0 голосов
/ 27 апреля 2019

Я создаю небольшое приложение для отслеживания местоположения, которое записывает местоположение с помощью FUSEDAPI и отправляет его в базу данных с помощью служб для запуска в фоновом режиме. Он отлично работает на Android O и выше, но я не знаю необходимых изменений кода, необходимых для его работы на Android зефир.

Я использую стандартную startService () для зефира Android и службу переднего плана для oreo. onLocationChanged обратный вызов не вызывается. Я скопировал тот же код для oreo, игнорируя код построителя уведомлений.

public class myMarshmallowService extends Service implements
        GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,
        LocationListener {
    String myUser = "";
    DatabaseReference mRef=FirebaseDatabase.getInstance("MYDATABASEURL").getReference();
    private static final String TAG = myService.class.getSimpleName();
    GoogleApiClient mLocationClient;
    LocationRequest mLocationRequest = new LocationRequest();

    @Override
    public void onCreate() {
        super.onCreate();
    }

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

        FirebaseAuth mAuth= FirebaseAuth.getInstance();
        if(mAuth.getCurrentUser().getUid()!=null)
        {
            myUser = mAuth.getCurrentUser().getUid();
        }
        else
        {
            Toast.makeText(this, "ERROR, RESTART", Toast.LENGTH_SHORT).show();
        }

        mLocationClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        mLocationRequest.setInterval(4000);
        mLocationRequest.setFastestInterval(2000);
        int priority = LocationRequest.PRIORITY_HIGH_ACCURACY;
        mLocationRequest.setPriority(priority);
        mLocationClient.connect();
        return START_NOT_STICKY;
    }

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

    private void sendLocationToFirebase(Location location) {
        Date currentTime = Calendar.getInstance().getTime();
        mRef.child(myUser).child(currentTime.toString()).child("latitude").setValue(location.getLatitude());
        mRef.child(myUser).child(currentTime.toString()).child("longitude").setValue(location.getLongitude());
    }

    @Override
    public void onConnected(Bundle dataBundle) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        if(mLocationClient.isConnected()) {
            LocationServices.FusedLocationApi.requestLocationUpdates(mLocationClient, mLocationRequest, this);
        }
    }

    @Override
    public void onLocationChanged(Location location) {
        sendLocationToFirebase(location);
        Toast.makeText(this, "Location Sent", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
    }

    @Override
    public void onConnectionSuspended(int i) {
        Log.d(TAG, "Connection suspended");
    }
}

Я новичок в Android, и это мой первый проект.

...