-1

こんにちはみんな私は、デバイスがモバイルデータまたはwifiの接続を失ったときにのみユーザーに通知したいアプリケーションを構築しています。

これまでのところ、私はこの方法を使用しました:

private void setupReceiver() {
        CheckNetworkStatusReceiver receiver = new CheckNetworkStatusReceiver();
        registerReceiver(receiver, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
    }

および私のレシーバーなど:

public class CheckNetworkStatusReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent != null){
            Log.e("Action ",intent.getAction());
            if(intent.getAction().equalsIgnoreCase("android.net.conn.CONNECTIVITY_CHANGE")) {
                Toast.makeText(context, "Connection changed", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

それは正常に動作しますが、問題は、ネットワークに接続されているときにトーストも表示されることです。これは、私が望んでいないことです。トーストが切断されたときにのみトーストを表示したい。

何か案は?

4

2 に答える 2

2

次のようにネットワーク接続を確認できます。

    public static boolean isNetworkConnected() {
    ConnectivityManager cm = (ConnectivityManager) MBankApplication.appContext.getSystemService
            (Context.CONNECTIVITY_SERVICE);

    NetworkInfo wifiNetwork = cm.getNetworkInfo(1);
    if (wifiNetwork != null && wifiNetwork.isConnected()) {
        return true;
    }
    NetworkInfo mobileNetwork = cm.getNetworkInfo(0);
    if (mobileNetwork != null && mobileNetwork.isConnected()) {
        return true;
    }
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork == null || !activeNetwork.isConnected()) {
        return false;
    }
    return true;
}

次に、トーストを表示します

    if(!isNetworkConnected()){
        Toast.makeText(context, "Connection changed", Toast.LENGTH_SHORT).show();
    }
于 2016-11-23T10:20:03.583 に答える
0

トーストを表示する前に、接続が利用可能かどうかを確認します

 if(!isNetworkAvailable()){
Toast.makeText(context, "Connection changed", Toast.LENGTH_SHORT).show();
 }




private boolean isNetworkAvailable() {
 ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
 NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
 return activeNetworkInfo != null; 
}

編集

安全のためにこれを使用してください

private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
于 2016-11-23T09:53:14.527 に答える