0

再起動やフライトモードへの移行用など、すでにいくつかの受信機を実行しています。ただし、必要なことを実行するのに間に合うようにインテントを常に取得しているわけではなく、外部サーバーに簡単なメッセージを送信します。

インテント フィルターを優先度 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:自分の意図を完全に明確にしていないことに気付きました。ネットワーク状態自体について話しているのではなく、機内モードに入るためのユーザー アクション、またはデバイスの電源をオフにするためのユーザー アクションです。

4

1 に答える 1

0

次のコードを参照してください。

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

    }

このコードは、ネットワークがダウンしたときに通知しますが、その直前に通知するかどうかはわかりません

于 2012-06-18T13:49:44.140 に答える