onStop()在线状态问题-主屏幕与以前的活动

时间:2019-04-24 20:03:49

标签: java android

我使用onStop方法确定应用何时从家庭活动关闭(特别是使用设备上的主页按钮或设备上的任务管理器按钮),它没有设置时间戳以表示用户上次在线(时间戳)在Firebase数据库中。但是,当对所有其他活动调用onStop时,它保持为online = true,这是正确的。

// Home button pressed + task button pressed + leaving activity
@Override
protected void onStop() {
    super.onStop();
    FirebaseUser currentUser = mFirebaseAuth.getCurrentUser();
    if (currentUser != null) {
        final String currentDate = DateFormat.getDateTimeInstance().format(new Date());
        mUserDatabase.child("Online").setValue(currentDate);
    }
}

有什么方法可以指定是否从家庭活动中调用onStop,选项a)是否会将时间戳记放置在数据库中,或者选项b)不会更改数据库的联机状态(因为用户仍在应用程序中,但在另一项活动)。

1 个答案:

答案 0 :(得分:0)

您可以创建一个像这样的类:-

public class MalikChat extends Application {

    private DatabaseReference mUserDatabase;
    private FirebaseAuth mAuth;

    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);

        mAuth = FirebaseAuth.getInstance();

        if (!isUserLoggedOut(this)) {
            if (mAuth.getCurrentUser() != null) {
                mUserDatabase = FirebaseDatabase.getInstance().getReference()
                        .child(onlineStatusTable).child(mAuth.getCurrentUser().getUid());

                mUserDatabase.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if (dataSnapshot != null) {
                            mUserDatabase.child("status").onDisconnect().setValue(String.valueOf(System.currentTimeMillis()));
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            } else {
                Toast.makeText(this, "Your session is expired, Please login again", Toast.LENGTH_SHORT).show();
                startActivity(new Intent(this, LoginActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
                setUserLoggedOut(this, true);
            }
        }
    }
}

或您的清单文件中:-

<application
        **android:name=".offlineHalper.MalikChat"**
        android:allowBackup="false"
        android:icon="@drawable/ic_chat_group"
        android:label="@string/app_name"
        android:roundIcon="@drawable/ic_chat_group"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">

如果要设置用户状态,则在所有活动中都设置此方法:-

@Override
    protected void onStart() {
        userStatus("online");
        super.onStart();
    }

    @Override
    protected void onPause() {
        userStatus(String.valueOf(System.currentTimeMillis()));
        super.onPause();
    }

userStatus方法:-

public static void userStatus(String status) {
        FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference(onlineStatusTable).child(firebaseUser.getUid());
        try {
            HashMap<String, Object> hashMap = new HashMap<>();
            hashMap.put("status", status);
            reference.updateChildren(hashMap);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }