sashimi4’s diary

日々の雑多なメモを書きます

"No Internet Connection Dialog" in Android

「インターネットに接続できません。設定を確認してください。」っていうあのダイアログをサクッと実装します。
地味なのでqiitaではなくここに書きます 😇

大まかな実装

app/src/main/AndroidManifest.xml

...
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
...
  • ステータスチェックをするメソッドを追加

任意の場所(*)に追加します。

...
public boolean isOnline() {
    ConnectivityManager connectivityManager = (ConnectivityManager)
        getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = null;
    if (connectivityManager != null) {
        netInfo = connectivityManager.getActiveNetworkInfo();
    }
    
    return netInfo != null && netInfo.isConnected() && netInfo.isAvailable();
}
...
  • 接続状況を判定&ダイアログで設定画面を案内

任意の場所(*)で先程のメソッドで判定し、オンラインでなければダイアログで設定画面を案内します。

if (!isOnline()) {
    new AlertDialog.Builder(this)
        .setTitle("No internet connection")
        .setMessage("A network connection is required.")
        .setIcon(android.R.drawable.ic_dialog_alert)
        .setPositiveButton("Open wireless settings",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
                }
            })
        .show();
    return;
}

動作

※ サンプルはMainActivityで判定するようにしました
機内モードで起動すると、ダイアログが表示されます。 f:id:sashimi4:20180411184633p:plain

positiveButton押下で、設定画面のWi-Fi設定画面へ移動します。 f:id:sashimi4:20180411184653p:plain

想定した動作はバッチリです。

任意の場所(*) について補足

主に以下のいずれかで行うことになるかと思います。

  • アプリ起動時に最初に呼ばれるActivity
    • MainActivity
    • スプラッシュスクリーンのActivity
  • 基底Activity方式ならBaseActivity
  • Applicationクラス
    • ActivityLifecycleCallbacks を実装して、 onActivityResumed(...) 辺りで判定すると、漏れがない感じでしょうか。

以上です。