2010-07-24 159 views
3

我有一個Activity在其onCreate方法中查找來自Web的數據。該活動由用戶觸發通知激活。所以這是一個常見的問題,用戶會很快打開手機,解鎖它,滑動打開通知,點擊通知,並且活動將在手機完成連接到互聯網之前激活。Android:活動建立網絡連接

我確實有一個友好的AlertDialog彈出,告知用戶數​​據無法接收,並在網絡連接時再試一次;但是否有一種方式讓Activity主動告訴手機連接並檢測到正在建立連接,然後等待連接建立,然後成功加載其數據

回答

4

通常情況下,你會做這樣的事情:

@Override 
public void onResume(){ 
    super.onResume(); 
    // first, check connectivity 
    if (isOnline){ 
     // do things if it there's network connection 
    }else{ 
     // as it seems there's no Internet connection 
     // ask the user to activate it 
     new AlertDialog.Builder(YourActivity.this) 
      .setTitle("Connection failed") 
      .setMessage("This application requires network access. Please, enable " + 
        "mobile network or Wi-Fi.") 
      .setPositiveButton("Accept", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // THIS IS WHAT YOU ARE DOING, Jul 
        YourActivity.this.startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); 
       } 
      }) 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        YourActivity.this.finish(); 
       } 
      }) 
      .show(); 
    } 
} 

的想法是讓用戶去配置一個網絡連接。然後,如果用戶確實要配置它,您將調用Settings.ACTION_WIRELESS_SETTINGS意圖。

此外,請注意isOnline變量,它是一個布爾值,指示是否有網絡連接。爲了設置變量,你可以使用一個外部簡單的類是這樣的:

public class CheckConnectivity { 
    public static boolean isOnline(Context context) { 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if(cm == null) 
      return false; 
     NetworkInfo info = cm.getActiveNetworkInfo(); 
     if(info == null) 
      return false; 
     return info.isConnectedOrConnecting(); 
    } 
} 

此外,您將有此權限添加到您的AndroidManifest.xml文件:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+2

這可能會令人困惑,但是,對於已經啓用了wifi和3G的用戶,它只是簡單的情況下,互聯網不是可用。在我的示例中,我的手機已啓用了其無線電廣播,但我在WPA2握手結束之前開始了我的活動。我很快就重新開始了我的活動,因爲wifi鏈接已建立,所以它沒有問題;但我希望能夠檢測到wifi鏈接實際上正在嘗試連接,並等待它連接。 – Ricket 2010-07-24 17:34:57

2

由克里斯蒂安最後這句話 'return info.isConnectedOrConnecting();'看來你可以根據方法返回的布爾值來做任何你想做的事情。 既然你以後是一個正面的回報值,你可以使用它的變量來回調你的活動的下一個動作