Я создаю небольшое приложение для отслеживания местоположения, которое записывает местоположение с помощью 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, и это мой первый проект.