如何在 Android 中检测设备状态离线/在线
Posted
技术标签:
【中文标题】如何在 Android 中检测设备状态离线/在线【英文标题】:How to detect device status Offline/Online in Android 【发布时间】:2014-04-15 12:55:14 【问题描述】:我是 android 的菜鸟。我想在网络仪表板上显示设备状态,无论设备是离线/在线。 GCM 对此是否有帮助,或者我应该为此使用什么。
或者我是否应该连续调用任何 Web API 以将手机状态从手机发送到服务器,直到手机开启,以便我可以在 Web 仪表板上显示手机的“在线”状态?
您的设备处于关闭状态时处于离线状态,而您的设备处于打开状态时处于在线状态
有什么想法吗??
【问题讨论】:
GCM 将在此处工作,只要手机收到 GCM 消息,就会向服务器请求我在线并接收消息,否则会离线 @user1799320 谢谢,这就是我要找的,不错 +1 【参考方案1】:第 1 步 -> 注册广播接收器以检查设备离线/在线状态。
在Broadcast Receiver的onReceive()方法中,检查网络是否有变化,如果有变化则转到步骤2。
第 2 步 -> 获取设备状态并调用 web api 以及 POST 参数“device_status”。
使用以下 API 获取 Internet 连接状态。
public boolean testNetwork(Context context)
ConnectivityManager connManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if ((connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null && connManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected())
|| (connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null &&
connManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isConnected()))
return true;
else
return false;
BroadcastReceiver networkStateReceiver = new BroadcastReceiver()
@Override
public void onReceive(Context context, Intent intent)
boolean connectivity = CommonUtils.getInstance().testNetwork(
BaseActivity.this);
if (!connectivity)
// write your code
else
//write your code
;
IntentFilter filter = new IntentFilter(
ConnectivityManager.CONNECTIVITY_ACTION);
try
registerReceiver(networkStateReceiver, filter);
catch (Exception e)
e.printStackTrace();
【讨论】:
这与我的问题无关。你应该更新你的答案 这里您将描述如何在 android 设备上本地检查网络状态。但是最初的问题的复杂性来自于“web仪表板状态”:服务器如何知道客户端的可用性?【参考方案2】:使用这个方法: 您不应向服务器发送 ping。服务器应在一段时间后向设备发送 ping,设备应回复。如果设备没有回复,则表示用户处于离线状态。基本上你需要创建与服务器的套接字连接并交换 ping
同样的事情在openfire服务器上实现
【讨论】:
如何暗示这个?假设我有 1000 个用户,我需要向所有人发送“心跳”吗?”以及何时发送?每分钟??,其他聊天应用会立即更新状态!!【参考方案3】:public boolean isOnline()
ConnectivityManager conMgr = (ConnectivityManager) getActivity()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMgr.getActiveNetworkInfo();
if (netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable())
/*
* Toast.makeText(getActivity(), "No Internet connection!",
* Toast.LENGTH_LONG).show();
*/
return false;
return true;
然后这样称呼它
if (isOnline())
//code if online
else
AlertDialog alertDialog = new AlertDialog.Builder(getActivity())
.create();
alertDialog.setTitle("Info");
alertDialog
.setMessage("Internet Not Available, Cross Check Your Internet Connectivity and Try Again!");
alertDialog.show();
【讨论】:
这与我的问题无关。你应该更新你的答案【参考方案4】:与任何 Jabber 服务器一起实施 XMPP 协议。 它为您提供正确的信息,因为它是为了制作离线/在线系统而创建的
使用下方链接获取帮助
https://xmpp.org/about/
【讨论】:
以上是关于如何在 Android 中检测设备状态离线/在线的主要内容,如果未能解决你的问题,请参考以下文章
如何在android应用程序中以在线和离线模式加载或检索网页?
用 JavaScript 检测浏览器在线/离线状态(JavaScript API?—?navigator.onLine)