0

次のコードを使用して、アプリ全体でインターネット接続を確認しています。

public class UpdateReceiver extends BroadcastReceiver {

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

        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetInfo = connectivityManager
                .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        boolean isConnected = activeNetInfo != null
                && activeNetInfo.isConnectedOrConnecting();
        if (isConnected){
            Log.i("NET", "connecte" + isConnected);
        Toast.makeText(context, "net Connected", Toast.LENGTH_LONG)
        .show();
        }
        else{
            Log.i("NET", "not connecte" + isConnected);
        Toast.makeText(context, "No Internet Connection", Toast.LENGTH_LONG)
                .show();
        }
    }
}

問題は、インターネット接続/Wi-Fi信号がない場合、トーストメッセージが他のアプリにも表示されることです..どうすればそれを回避できますか?

ありがとう:)

4

4 に答える 4

0

アプリケーション クラスを作成します。

public class MyApplication extends Application {
    private static MyApplication instance;

    // Returns the application instance 
    public static MyApplication getInstance() {
        if (instance == null)
            instance = this;
        return instance;
    }
}

マニフェストに追加:

<application
        android:name=".MyApplication"
        ... >

放送受信機で:

Toast.makeText(MyApplication.getInstance().getApplicationContext(), "No Internet Connection", Toast.LENGTH_LONG)
                .show();
于 2013-04-15T08:37:42.330 に答える
0

contex の代わりに this または getBaseContext() を使用してください。

于 2013-04-15T08:38:10.987 に答える
0

BroadcastReceiver レシーバーを使用して、インターネット接続があるかどうかを確認しています。これは、アプリケーションに関係なく、ネットワーク接続が変更されるたびに実行されます。初心者なので説明します。

ブロードキャスト レシーバーを、特定のタイプのブロードキャストをリッスンするラジオに関連付けることができます。ブロードキャストは、イベントが発生したときに Android システムによって送信されるものです。そのため、イベントがブロードキャスト レシーバーのタイプである場合は、それを取得します。

したがって、アプリケーションから接続を確認する必要がある場合は、メソッドを作成して呼び出すだけです。

 public boolean isNetworkAvailable(Context context) {

    ConnectivityManager connectivityManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetInfo = connectivityManager
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    boolean isConnected = activeNetInfo != null
            && activeNetInfo.isConnectedOrConnecting();
    if (isConnected){
        Log.i("NET", "connecte" + isConnected);
    Toast.makeText(context, "net Connected", Toast.LENGTH_LONG)
    .show();
    }
    else{
        Log.i("NET", "not connecte" + isConnected);
    Toast.makeText(context, "No Internet Connection", Toast.LENGTH_LONG)
            .show();
    }

return isConnected;
}

接続を確認する必要があるときはいつでも、このメソッドを呼び出します。

また

上記の必要に応じて上記のイベント変更の通知を受け取る必要がある場合は、同じブロードキャスト レシーバーを使用して、ブロードキャスト レシーバーをマニフェスト ファイルに登録する代わりに、アプリケーションの起動時にアプリケーションのコードから登録し、アプリケーションの登録を解除することができます。終了します。

于 2013-04-15T08:41:54.670 に答える
0

申し訳ありませんが、「...トーストメッセージが他のアプリにも表示されています..どうすればそれを回避できますか?」という元の質問に実際に回答する回答はありません。

どのアプリが一番上にあるかに関係なく、トーストが表示されます。そのように設計されています。したがって、それを「回避」することはできません。この動作を回避するには、Tosat の使用を避ける必要があります。レシーバーはバックグラウンドで動作し、トーストを表示します。現在どのアプリがユーザーに表示されているかは気にしません。

こちらのリンクもご確認ください。 http://developer.android.com/guide/topics/ui/notifiers/toasts.html

于 2013-04-15T09:06:42.087 に答える