各アクティビティでインターネット接続を確認したい。紛失した場合、メッセージが表示されます。
これを達成する方法を教えてもらえますか?
各アクティビティでインターネット接続を確認したい。紛失した場合、メッセージが表示されます。
これを達成する方法を教えてもらえますか?
1 つの時点でアクティブにできる接続は 1 つだけです。したがって、より簡単な答えは次のとおりです。
final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected()) {
// notify user you are online
} else {
// notify user you are not online
}
また、ConnectivityManager#TYPE_WIMAX などの新しいタイプのネットワークにも対応します。
また、ネットワーク状態を監視するために必要な権限があることを確認してください。この権限を AndroidManifest.xml に追加する必要があります。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
ConnectivityManagerを使用して、ネットワークの状態を確認できます。
ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED
|| conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ) {
// notify user you are online
}
else if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED
|| conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.DISCONNECTED) {
// notify user you are not online
}
定数 ConnectivityManager.TYPE_MOBILE および ConnectivityManager.TYPE_WIFI は接続タイプを表し、これら 2 つの値はすべてを網羅しているわけではないことに注意してください。完全なリストについては、こちらを参照してください。
また、ネットワーク状態を監視するために必要な権限があることを確認してください。この権限を AndroidManifest.xml に追加する必要があります。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
これは、さまざまなタイプのネットワーク ステータスに対して実行できます。
public void checkNetworkStatus(){
final ConnectivityManager connMgr = (ConnectivityManager)
this.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final android.net.NetworkInfo mobile =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if( wifi.isAvailable() ){
Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show();
}
else if( mobile.isAvailable() ){
Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show();
}
}
モバイルとWi-Fiのネットワークカバレッジとデータの可用性を直接確認できます
ネットワークカバレッジの可用性については、
private boolean isNetworkAvailable()
{
ConnectivityManager conxMgr = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return ((mobileNwInfo== null ? false : mobileNwInfo.isAvailable()) || (wifiNwInfo == null ? false : wifiNwInfo.isAvailable()));
}
ネットワークが利用可能な場合のデータの可用性について
private boolean isDataAvailable()
{
ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return ((mobileNwInfo== null? false : mobileNwInfo.isConnected() )|| (wifiNwInfo == null? false : wifiNwInfo.isConnected()));
}
修正
if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED
|| conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ) {
//notify user you are online
}
する必要があります
if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED
|| conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) {
//notify user you are online
}
値 (1) と (0) をハードコーディングする代わりに、ConnectivityManager.getNetworkInfo(0).getState()
and を適切に使用していません。ConnectivityManager.getNetworkInfo(1).getState()
ConnectivityManager.TYPE_WIFI
ConnectivityManager.TYPE_MOBILE
これは、ネットワークにアクセスできるかどうかを確認するためのブール チェックです。ネットワーク アクセスの種類 (モバイル、Wi-Fi など) を特定するのではなく、オンラインかどうかを確認するだけです。
boolean mobileNwInfo = false;
ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
try { mobileNwInfo = conxMgr.getActiveNetworkInfo().isConnected(); }
catch (NullPointerException e) { mobileNwInfo = false; }
if ( mobileNwInfo == false ) {
// Your code goes here...
}