"No Internet Connection Dialog" in Android
「インターネットに接続できません。設定を確認してください。」っていうあのダイアログをサクッと実装します。
地味なのでqiitaではなくここに書きます 😇
大まかな実装
- パーミッション :
ACCESS_NETWORK_STATE
を追加。
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で判定するようにしました
機内モードで起動すると、ダイアログが表示されます。
positiveButton押下で、設定画面のWi-Fi設定画面へ移動します。
想定した動作はバッチリです。
任意の場所(*) について補足
主に以下のいずれかで行うことになるかと思います。
- アプリ起動時に最初に呼ばれるActivity
- MainActivity
- スプラッシュスクリーンのActivity
- 基底Activity方式ならBaseActivity
- Applicationクラス
ActivityLifecycleCallbacks
を実装して、onActivityResumed(...)
辺りで判定すると、漏れがない感じでしょうか。
以上です。