Как проверить, что пользователь онлайн в студии android - PullRequest
0 голосов
/ 06 апреля 2020

Я использовал следующий код

public class AppControllerClass extends Application implements LifecycleObserver {


private FirebaseAuth mAuth;
private DatabaseReference stateRef;

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

    try {
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
    }catch (Exception e){
        e.printStackTrace();
    }

    ProcessLifecycleOwner.get().getLifecycle().addObserver(this);

    mAuth = FirebaseAuth.getInstance();
    stateRef= FirebaseDatabase.getInstance().getReference().child("Users").child(mAuth.getCurrentUser().getUid()).child("user_state");

}

@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onMoveToForeground() {

    stateRef.child("state").setValue("online");

    Log.i("AppActivity","foreground");
}

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onMoveToBackground() {

    stateRef.child("state").setValue("offline");

    Log.i("AppActivity","background");
}
}

Я обновил свой код,

    onMoveToBackground()

вызывается, когда я добираюсь до фона, я вижу фон журнала AppActivity, но как только я возвращаюсь в приложение, состояние обновляется как офлайн, а затем вызывается

    onMoveToForeground()

и состояние быстро обновляется как онлайн.

Я не знаю, что не так, почему нет ' t состояние обновляется в фоновом режиме, пожалуйста, кто-нибудь, попробуйте и дайте мне рабочее решение.

1 Ответ

0 голосов
/ 06 апреля 2020

Попробуйте этот код для проверки состояния приложения с помощью LifecycleObserver

gradle

  implementation "android.arch.lifecycle:common-java8:1.1.1"
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'

AppControllerClass

 public class AppController extends Application implements LifecycleObserver {
    private FirebaseAuth mAuth;
    public static DatabaseReference USERS_DATABASE,INBOX_DATABASE,MESSAGE_DATABASE;
    private static String TAG=AppController.class.getSimpleName();

    @Override
    public void onCreate() {
        super.onCreate();
        try {
            FirebaseDatabase.getInstance().setPersistenceEnabled(true);
        }catch (Exception e){
            e.printStackTrace();
        }
        FirebaseMessaging.getInstance().setAutoInitEnabled(true);
        try {
            mAuth = FirebaseAuth.getInstance();
            USERS_DATABASE = FirebaseDatabase.getInstance().getReference().child(USER_TABLE);
            USERS_DATABASE.keepSynced(true);
        } catch (Exception e) {
            Log.e(TAG, "" + e.getMessage());
        }
        ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onMoveToForeground() {
        // app moved to foreground
        Log.e(TAG,"App is in foreground State");
        updateParticularField("onlineStatus","online");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onMoveToBackground() {
        // app moved to background
        Log.e(TAG,"App is in Background State");
        updateParticularField("onlineStatus","offline");
    }
    public void updateParticularField(String fieldName,String fieldValue){
        try {
            String currentFireBaseId=mAuth.getUid();
            if (!currentFireBaseId.equals("null")) {
                USERS_DATABASE.child(currentFireBaseId).child(fieldName).setValue(fieldValue);
            }
        }catch (Exception e){

            e.printStackTrace();
        }
    }

}

Манифест

 <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:name=".AppController"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

Добавить Манифест

android:name=".AppController" 

И убедитесь, что ваш minSdkVersion = 24

Этот код изменен мой онлайн-статус на переднем и заднем плане приложения

Снимки экрана для Firebase, как показано ниже:

enter image description here

enter image description here

...