我有一個Activity在其onCreate方法中查找來自Web的數據。該活動由用戶觸發通知激活。所以這是一個常見的問題,用戶會很快打開手機,解鎖它,滑動打開通知,點擊通知,並且活動將在手機完成連接到互聯網之前激活。Android:活動建立網絡連接
我確實有一個友好的AlertDialog彈出,告知用戶數據無法接收,並在網絡連接時再試一次;但是否有一種方式讓Activity主動告訴手機連接並檢測到正在建立連接,然後等待連接建立,然後成功加載其數據?
我有一個Activity在其onCreate方法中查找來自Web的數據。該活動由用戶觸發通知激活。所以這是一個常見的問題,用戶會很快打開手機,解鎖它,滑動打開通知,點擊通知,並且活動將在手機完成連接到互聯網之前激活。Android:活動建立網絡連接
我確實有一個友好的AlertDialog彈出,告知用戶數據無法接收,並在網絡連接時再試一次;但是否有一種方式讓Activity主動告訴手機連接並檢測到正在建立連接,然後等待連接建立,然後成功加載其數據?
通常情況下,你會做這樣的事情:
@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" />
由克里斯蒂安最後這句話 'return info.isConnectedOrConnecting();'看來你可以根據方法返回的布爾值來做任何你想做的事情。 既然你以後是一個正面的回報值,你可以使用它的變量來回調你的活動的下一個動作
這可能會令人困惑,但是,對於已經啓用了wifi和3G的用戶,它只是簡單的情況下,互聯網不是可用。在我的示例中,我的手機已啓用了其無線電廣播,但我在WPA2握手結束之前開始了我的活動。我很快就重新開始了我的活動,因爲wifi鏈接已建立,所以它沒有問題;但我希望能夠檢測到wifi鏈接實際上正在嘗試連接,並等待它連接。 – Ricket 2010-07-24 17:34:57