【问题标题】:How to detect device status Offline/Online in Android如何在 Android 中检测设备状态离线/在线
【发布时间】:2014-04-15 12:55:14
【问题描述】:

我是 Android 的菜鸟。我想在网络仪表板上显示设备状态,无论设备是离线/在线。 GCM 对此是否有帮助,或者我应该为此使用什么。

或者我是否应该连续调用任何 Web API 以将手机状态从手机发送到服务器,直到手机开启,以便我可以在 Web 仪表板上显示手机的“在线”状态?

您的设备处于关闭状态时处于离线状态,而您的设备处于打开状态时处于在线状态

有什么想法吗??

【问题讨论】:

  • GCM 将在此处工作,只要手机收到 GCM 消息,就会向服务器请求我在线并接收消息,否则会离线
  • @user1799320 谢谢,这就是我要找的,不错 +1

标签: android


【解决方案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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2019-06-23
    • 2019-07-15
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多