Как отправить информацию в сервис с помощью Intent в Android - PullRequest
0 голосов
/ 16 июня 2019

Я создал сервис, который обновляет координаты GPS и отправляет их на FireBase Realtime Database.Служба запускается, когда пользователь заходит на домашнюю страницу.Я хочу иметь возможность отправить строку из Activity в класс обслуживания. Проблема в том, что я не могу вызвать метод getIntent() внутри функции loginToFirebase().

Воткод, который я попробовал:

Класс обслуживания:

 public class TrackerService extends Service {
  private static final String TAG =    TrackerService.class.getSimpleName();


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

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

    buildNotification();

    loginToFirebase();

}

private void buildNotification() {
    String stop = "stop";

    registerReceiver(stopReceiver, new IntentFilter(stop));

    PendingIntent broadcastIntent = PendingIntent.getBroadcast(

            this, 0, new Intent(stop), PendingIntent.FLAG_UPDATE_CURRENT);

    // Create the persistent notification

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setContentTitle(getString(R.string.app_name))
            .setContentText("Suivi de la position ...")
            .setOngoing(true)
            .setContentIntent(broadcastIntent)
            .setSmallIcon(R.drawable.alert);
    startForeground(1, builder.build());
}

protected BroadcastReceiver stopReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "received stop broadcast");
        // Stop the service when the notification is tapped
        unregisterReceiver(stopReceiver);
        stopSelf();
    }
};

private void loginToFirebase() {

    String password = "myPassword";
    FirebaseAuth.getInstance().signInWithEmailAndPassword(
            email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>(){
        @Override
        public void onComplete(Task<AuthResult> task) {
            if (task.isSuccessful()) {
                Log.d(TAG, "firebase auth success");
                requestLocationUpdates();
            } else {
                Log.d(TAG, "firebase auth failed");
            }
        }
    });
}

private void requestLocationUpdates() {
    LocationRequest request = new LocationRequest();
    request.setInterval(30000);
    request.setFastestInterval(30000);
    request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    FusedLocationProviderClient client = LocationServices.getFusedLocationProviderClient(this);
    final String path = "locations" + "/" + 123;
    int permission = ContextCompat.checkSelfPermission(this,
            Manifest.permission.ACCESS_FINE_LOCATION);
    if (permission == PackageManager.PERMISSION_GRANTED) {
        client.requestLocationUpdates(request, new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                try {
                    DatabaseReference ref = FirebaseDatabase.getInstance().getReference(path);
                    Location location = locationResult.getLastLocation();
                    if (location != null) {
                        Log.d(TAG, "location update " + location);
                        ref.setValue(location);
                    }
                }catch (Exception e){

                }
            }
        }, null);
    }
}

}

Метод, из которого я вызываю службу (в действии):

  private void startTrackerService() {
    Intent goService= new Intent(AccueilEtudiant.this,TrackerService.class);
    goService.putExtra("email",getIntent().getStringExtra("email"));
    startService(goService);

}

Есть рекомендации?

1 Ответ

0 голосов
/ 16 июня 2019

Я предлагаю вам использовать постоянство. в своей службе используйте данные, полученные от sharedPreferences, а в своей деятельности продолжайте обновлять sharedPreferences

информация о gps обновлена ​​=> сохранить в хранилище => использовать постоянную информацию о gps в службе

Служба должна прочитать данные из выбранного хранилища перед отправкой данных.

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