如何在Android中离线/在线检测设备状态

时间:2014-04-15 12:55:15

标签: android

我是Android中的菜鸟。我想在Web仪表板上显示设备状态,无论设备是离线还是在线。 GCM对此有用,或者我应该使用什么。

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

设备关闭时的离线状态&设备开启时的在线状态

任何想法??

4 个答案:

答案 0 :(得分:4)

步骤1 - >注册广播接收器以离线/在线检查设备状态。

在广播接收器的onReceive()方法中,检查网络更改,如果有更改,请转到步骤2.

步骤2 - >获取设备状态并使用POST参数“device_status”调用web api。

使用以下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();
    }

答案 1 :(得分:2)

使用此方法: 你不应该发送ping到server.Server应该在一段时间间隔后发送ping到设备,设备应该回复。如果设备未回复,则表示用户处于脱机状态。基本上你需要创建与服务器的套接字连接并交换ping

同样的事情在openfire服务器上实现

答案 2 :(得分:1)

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();
        }

答案 3 :(得分:-1)

实施XMPP协议以及任何Jabber服务器。 它为您提供正确的信息,因为它是为了创建离线/在线系统而创建的

帮助使用下面的链接

https://xmpp.org/about/