我有一个 Activity,它在其 onCreate 方法中从 Web 中查找数据。该 Activity 由用户点击通知激活。因此,常见的问题是用户会快速打开手机、解锁、滑动打开通知、点击通知,并且 Activity 会在手机连接到互联网之前激活。
我确实有一个友好的 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
Intent 。
另外,请注意 isOnline
变量,它是一个 boolean 值,表示是否存在网络连接。为了设置该变量,您可以使用这样的外部简单类:
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" />
关于java - Android: Activity 建立网络连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3325915/