gpt4 book ai didi

android - Firebase:服务中的 onDisconnect()

转载 作者:行者123 更新时间:2023-11-29 00:55:50 25 4
gpt4 key购买 nike

我正在做一个我必须做的项目

configure realtime internet connection status

一个客户端应用程序,即使应用程序在后台。

我必须在

上显示它

ServerSide that weather specific device is connected to internet or not

我正在使用 Firebase 执行此场景,但它不起作用。

连接服务

public class ConnectionService extends Service implements ConnectivityReciever.ConnectivityRecieverListner {

public static final int notify = 5000;
private Handler mHandler=new Handler();
private Timer mTimer = null;
FirebaseDatabase db;
DatabaseReference dbRef;


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

@Override
public void onCreate() {
super.onCreate();
dbRef=FirebaseDatabase.getInstance().getReference(Common.DEVICE_NAME).child("online");
MyApplication.getInstance().setConnectivtyListner(ConnectionService.this);
boolean isConnected=ConnectivityReciever.isConnected();
checkConnection(isConnected);

if(mTimer!=null){
mTimer.cancel();
}else{
mTimer=new Timer();
mTimer.scheduleAtFixedRate(new TimeDisplay(),0,notify);
}
}

private void checkConnection(boolean isConnected) {

}

@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(ConnectionService.this, "Service is destroyed", Toast.LENGTH_SHORT).show();

}

@Override
public void onNetworkConnectionChanged(boolean isConnected) {
if(isConnected){
dbRef.onDisconnect().setValue("true");
Toast.makeText(ConnectionService.this, "online", Toast.LENGTH_SHORT).show();

}
if(!isConnected){

dbRef.onDisconnect().setValue(ServerValue.TIMESTAMP);

Toast.makeText(ConnectionService.this, "offline", Toast.LENGTH_SHORT).show();

}
}

//class TimeDisplay for handling task
class TimeDisplay extends TimerTask {
@Override
public void run() {
// run on another thread
mHandler.post(new Runnable() {
@Override
public void run() {
MyApplication.getInstance().setConnectivtyListner(ConnectionService.this);
boolean isConnected=ConnectivityReciever.isConnected();
checkConnection(isConnected);
// display toast
Toast.makeText(ConnectionService.this, "Service is running", Toast.LENGTH_SHORT).show();
}
});

}

private void checkConnection(boolean isConnected) {
if(isConnected){
dbRef.setValue("true");
Toast.makeText(ConnectionService.this, "online", Toast.LENGTH_SHORT).show();
}
if(!isConnected){

dbRef.child("online").onDisconnect().setValue(ServerValue.TIMESTAMP);
Toast.makeText(ConnectionService.this, "offline", Toast.LENGTH_SHORT).show();
}
}

}


}

申请

public class MyApplication extends Application {
public static MyApplication mInstance;

DatabaseReference dbRef;
@Override
public void onCreate() {
super.onCreate();
mInstance=this;
Common.DEVICE_NAME = android.os.Build.MODEL;
FirebaseApp.initializeApp(this);

FirebaseDatabase.getInstance().setPersistenceEnabled(true);



}

public static synchronized MyApplication getInstance(){
return mInstance;
}

public void setConnectivtyListner(ConnectivityReciever.ConnectivityRecieverListner listner){
ConnectivityReciever.connectivityReceiverListener = listner;
}
}

所有的方法我都试过了,都没有用。

帮助将被拒绝。

谢谢

最佳答案

如果您已使用 menifest.xml 和返回的 start_sticky 注册您的服务,它应该可以工作,但还有另一种方法,您可以编写一个 api 来 ping 服务器(在特定时间间隔后在服务中调用它),并且使用 TRUE 保存时间戳(如果已连接),所以现在时间戳与 bool 值 true 一起保存,让我们假设现在连接已关闭或单元已死,因为不会向服务器发送更新, 正确的?现在它来了 reciver/admin 应用程序的魔力(你想在其中以图形方式显示此在线状态),现在编写另一个 API 将获取带有时间戳的已保存响应并获取触发此获取 API 的当前时间,找到区别 b/w 这两个时间戳 & 在这里强加一个条件 `(这里的区别是以秒为单位,因为我们使用的是时间戳)

if(timeDifference>60)`
{
echo "true";
}
else
echo "false";

通过这种方式你可以得到实时的在线/离线状态在您可以设置的接收者应用程序上

if(response.equals("true"))
{
textView.setText("ONLINE")
}
else
{
textView.setText("OFFLINE")
}

此外,您也可以阅读这篇文章的答案 Save Response to Server When Network Connection goes OFF

关于android - Firebase:服务中的 onDisconnect(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54806278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com