2016-07-19 4 views
0

私のアプリには気象活動のモジュルがあります。ユーザーが気象機能をクリックして有効にすると、ネットワーク接続のチェックが行われます。問題は、開始時には、有効にするAndroid Dialogに「ネットワーク接続なし」と表示されました。Android:ネットワーク接続チェックは常に失敗します

ユーザーが「有効」をクリックすると、オプション(すべてがオン)で有効にすることはありません。 ユーザーが「キャンセル」をクリックすると、ダイアログが消えてアプリケーションが機能しています。ここで

は活動からの私のコードです:

@Override 
public void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    setIntent(intent); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    EasyTracker.getInstance(this).activityStart(this); 
    // Connect the client. 
    mLocationClient.connect(); 

    // Registers BroadcastReceiver to track network connection changes. 
    mNetworkReceiver = new NetworkReceiver() { 
     private MyAlertDialog enableNetworkDialog = null; 

     @Override 
     public void onNoConnectivity() { 
      Toast.makeText(MainActivity.this, 
        getString(R.string.network_disabled), Toast.LENGTH_LONG) 
        .show(); 

      // If the dialog already prompted, do nothing 
      if (enableNetworkDialog != null 
        && enableNetworkDialog.isShowing()) 
       return; 

      // Prompt a dialog for user to open the network settings screen 
      enableNetworkDialog = new MyAlertDialog(MainActivity.this, 
        null, getString(R.string.network_disabled), false); 
      enableNetworkDialog.setPositiveButton("Enable", 
        new OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, 
           int which) { 
          toggleNetworkSourceSetting(); 
         } 
        }); 
      enableNetworkDialog.setNegativeButton("Cancel", 
        new OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, 
           int which) { 
          dialog.dismiss(); 
         } 
        }); 
      enableNetworkDialog.show(); 
     } 

     @Override 
     public void onConnect() { 
      if (enableNetworkDialog != null 
        && enableNetworkDialog.isShowing()) 
       enableNetworkDialog.dismiss(); 
     } 

     @Override 
     public void onNetworkChange() { 
     } 

     @Override 
     public void onReconnect() { 
     } 
    }; 
} 

UPDATE:これは私のマニフェストです:

<!-- Grant the network access permission --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

これは私のlogcatからの切り抜きです:アップデートスーパー方法

[ 07-19 10:43:17.876 18037:18037 D/   ] 
                   Current Network Info : NetworkInfo: type: mobile_supl[HSPA+, type_ext: mobile_supl], state: DISCONNECTED/DISCONNECTED, reason: dataDisabled, extra: internet.telekom, roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false, isIpv4Connected: false, isIpv6Connected: false 

[ 07-19 10:43:17.876 18037:18037 D/   ] 
                   No network is available 

07-19 10:43:19.778 18037-18037/bakteriusdeveloper.master D/Network Connection: mobile is available 

/** 
* The subclass of the BroadcastReeiver is used to detect the change of 
* connectivity. 
* 
*/ 
public class NetworkReceiver extends BroadcastReceiver { 

    public NetworkReceiver() { 
     super(); 
    } 

    public void onNoConnectivity() { 
    }; 

    public void onNetworkChange() { 
    }; 

    public void onConnect() { 
    }; 

    public void onReconnect() { 
    }; 

    public void toggleNetworkSourceSetting() { 
     startActivity(new Intent(
       android.provider.Settings.ACTION_WIRELESS_SETTINGS)); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     ConnectivityManager conn = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activNetworkInfo = conn.getActiveNetworkInfo(); 

     String failMessage = intent 
       .getStringExtra(ConnectivityManager.EXTRA_REASON); 
     Logger.printMessage(getClass().getSimpleName(), failMessage, 
       Logger.DEBUG); 
     Boolean isNoConnectivity = intent.getBooleanExtra(
       ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 
     Boolean isFailOver = intent.getBooleanExtra(
       ConnectivityManager.EXTRA_IS_FAILOVER, false); 
     Logger.printMessage(getClass().getSimpleName(), "is Failover: " 
       + isFailOver, Logger.DEBUG); 
     Boolean isNetworkChanged = false; 

     NetworkInfo otherNetworkInfo = (NetworkInfo) intent 
       .getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO); 
     NetworkInfo networkInfo = (NetworkInfo) intent 
       .getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 

     Logger.printMessage(getClass().getSimpleName(), 
       "Current Network Info : " + networkInfo, Logger.DEBUG); 
     Logger.printMessage(getClass().getSimpleName(), 
       "Other Network Info : " + otherNetworkInfo, Logger.DEBUG); 

     if (networkInfo != null && networkInfo.isConnected()) { 
      if (isFailOver) { 
       Logger.printMessage(getClass().getSimpleName(), 
         "Network is re-connected and available now", 
         Logger.DEBUG); 
       onReconnect(); 
       return; 
      } else { 
       Logger.printMessage(getClass().getSimpleName(), 
         "Network is available", Logger.DEBUG); 
       onConnect(); 
       return; 
      } 

     } else if (networkInfo != null 
       && !networkInfo.isConnectedOrConnecting()) { 
      // do application-specific task(s) based on the current network 
      // state, such 
      // as enabling queuing of HTTP requests when currentNetworkInfo 
      // is connected etc. 
      if (otherNetworkInfo != null 
        && otherNetworkInfo.isConnectedOrConnecting()) { 
       isNetworkChanged = true; 
      } else { 
       Logger.printMessage(getClass().getSimpleName(), 
         "No network is available", Logger.DEBUG); 
       onNoConnectivity(); 
       return; 
      } 
     } 

     // No network is active OR no network is available 
     if (activNetworkInfo == null || isNoConnectivity) { 
      if (isNetworkChanged) { 
       Logger.printMessage(getClass().getSimpleName(), 
         "Change network connectivity", Logger.DEBUG); 
       onNetworkChange(); 
       return; 
      } else { 
       Logger.printMessage(getClass().getSimpleName(), 
         "No network is available", Logger.DEBUG); 
       onNoConnectivity(); 
       return; 
      } 
     } 
    } 
} 

私のリクエストに何が問題なのですか?何か案は?

+0

をあなたのエラーは何ですか? – DKV

+0

あなたのアプリのマニフェストにインターネットアクセス権がありますか? – k3b

+0

こんにちは、私のエラーは、メッセージが常にポップアップすることです。ネットワーク接続の場合でも! – BakteriusD

答えて

0

あなたはonResumeの代わりONSTARTにNetworkReceiverを登録し、それが

+0

こんにちは。 onResumeに登録しても問題は解決されません。同じ結果... – BakteriusD

+0

NetworkReceiverはブロードキャストレシーバですか、はいの場合は受信メソッドはどこですか? –

+0

質問の更新を参照してください! – BakteriusD

0

はあなたのAndroidManifest.xml内のネットワークアクセス権を追加していることを確認してください動作するかどうかを確認することができます

<uses-permission android:name="android.permission.INTERNET" /> 

もマニフェストでbroadcastreceiverを登録します。

<receiver 
      android:name=".NetworkReceiver" 
      android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      </intent-filter> 
</receiver> 

その後NetworkReceiverクラス:

あなたはネットワークステータスコールをチェックしたい場合
public class NetworkReceiver extends BroadcastReceiver { 

    private static volatile boolean connected; 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     Log.d("Network", "Network changed"); 
     if (intent.getExtras() != null) { 
      update(); 
     } 
    } 

    public static void update() { 
     ConnectivityManager connectivityManager = (ConnectivityManager) ApplicationLoader 
       .applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
     connected = networkInfo != null && networkInfo.isConnected(); 
    } 

    public static boolean isConnected() { 
     return connected; 
    } 
} 

は次に:

NetworkReceiver.update(); // Updates network status 
if (NetworkReceiver.isConnected()) { 
    // do whatever you want. 
} 
関連する問題