Android 在网络关闭前接收广播的任何方式

Android 在网络关闭前接收广播的任何方式,android,networking,broadcastreceiver,Android,Networking,Broadcastreceiver,我已经有几个接收器在运行,包括一个用于重新启动和进入飞行模式的接收器。 但是,我并不总是能够及时得到我需要做的事情的意图,即向外部服务器发送一条快速消息 即使将intent过滤器设置为priority 1000,也不能保证我能在太晚之前发送,尽管它确实有帮助 如前所述,并不是我没有收到我的广播,我只是在网络已经关闭后太晚才收到 任何指向我可以找到这方面的提示的建议都是非常受欢迎的,我在过去几天里一直在搜索网络,没有运气 编辑: 我目前正在使用4个广播侦听器之间的以下操作

我已经有几个接收器在运行,包括一个用于重新启动和进入飞行模式的接收器。 但是,我并不总是能够及时得到我需要做的事情的意图,即向外部服务器发送一条快速消息

即使将intent过滤器设置为priority 1000,也不能保证我能在太晚之前发送,尽管它确实有帮助

如前所述,并不是我没有收到我的广播,我只是在网络已经关闭后太晚才收到

任何指向我可以找到这方面的提示的建议都是非常受欢迎的,我在过去几天里一直在搜索网络,没有运气

编辑: 我目前正在使用4个广播侦听器之间的以下操作

            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />

            <action android:name="android.intent.action.BOOT_COMPLETED" />

            <action android:name="android.intent.action.PHONE_STATE" />
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            <action android:name="android.intent.action.PROVIDER_CHANGED" />

            <action android:name="android.intent.action.ACTION_SHUTDOWN" />
            <action android:name="android.intent.action.AIRPLANE_MODE" />

编辑2:我意识到我没有把我的意图完全说清楚。我说的不是网络状态本身,而是用户进入飞行模式或关闭设备的操作。

参考以下代码:

IntentFilter monitorInternetConnectivityFilter = new IntentFilter(
            ConnectivityManager.CONNECTIVITY_ACTION);
MonitorInternetConnectivity monitorInternetConnectivityReciever;
monitorInternetConnectivityReciever = new MonitorInternetConnectivity();
class MonitorInternetConnectivity extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

            if (!NetworkHelper.isOnline(context)) {
                //Toast.maketext("Network went down");
            }

        }

    }

@Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();

        unregisterReceiver(monitorInternetConnectivityReciever);

    }
@Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onPause();

        registerReceiver(monitorInternetConnectivityReciever,
                monitorInternetConnectivityFilter);

    }
////////////////////// 网络助手

public static boolean isOnline(Context cxt) {
        ConnectivityManager cm = (ConnectivityManager) cxt
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnectedOrConnecting() && canHit()) {

            Logger.debug(NetworkHelper.class, "mode is online");
            return true;
        }
        return false;
}

public static boolean canHit() {

        try {
            URL url = new URL("http://www.google.com/");
            HttpURLConnection urlConnection = (HttpURLConnection) url
                    .openConnection();
            urlConnection.setConnectTimeout(3000);
            urlConnection.connect();
            urlConnection.disconnect();
            return true;
        } catch (Exception e) {
            Logger.error(NetworkHelper.class, e.getMessage());
            return false;
        } 

    }

此代码将在网络关闭时通知您,但不确定是否在关闭前通知您

您正在使用哪些其他广播?请列出你正在使用的所有东西。根据定义,这是不可能的。系统可能在网络关闭之前不知道网络正在关闭。我知道预测网络本身将关闭是不可能的。我指的是用户进入飞行模式或关闭设备的操作。请问,发送此消息的目的是什么?也许我们可以找到另一个解决方案,如果我们知道,你正在努力实现什么。我能给出的最好的描述是,当用户关闭手机时,能够自动注销用户。到目前为止,我所考虑的另一种选择是心跳,但这对于从电池上运行的系统来说从来就不是一个好主意。从外观上看,它会在事实之后通知我,虽然重新连接PAR可能很方便。不过我还是要试一试。谢谢。我的方式有点不同,但基本上是用同一个接收器。我没有及时得到网络更新。正如我所想,只有在事实发生之后。从表面上看,我不能做我想做的事。我将通过一个用户操作得到系统正在脱机的通知,但是如果我及时得到通知以便能够进行传输,这完全是随机的。不过,谢谢你的指点。