Android 如果internet连接中断,如何继续进行此活动(而不是进行其他活动)?
我有一个非常常见的问题,我想每个安卓开发人员都会遇到这个问题。我正在制作一个从web服务器加载数据的应用程序。因此,互联网连接正在被使用。但我必须在每次呼叫服务器之前检查互联网连接。我正在使用ConnectivityManager进行这项工作,它可以正常工作 我的问题实际上是在互联网连接丢失时通知用户。我想向用户显示一个AlertDialog(警报)对话框,告诉他internet连接已断开。现在的问题是,如果用户单击一个按钮并且必须启动一个新的活动(这将从服务器加载数据),那么我就无法向他显示调用活动的对话框。这里的问题是,如果互联网不可用,我不想导航到其他活动。我只想继续参加这项活动 此活动上有许多按钮,单击这些按钮,用户可以转到不同的活动。我只想在没有互联网的情况下不要打开其他活动,只向他显示有关此活动的对话框。一种方法是检查每个按钮的点击(在onClick方法中),然后通知用户internet连接丢失。但这对我来说可能非常忙碌,因为每个活动都有很多活动和按钮 是否有一种通用而有效的方法来确定此活动是否已结束,新活动是否正在启动,并在找到后向用户显示对话框,而不是在internet不可用的情况下移动到下一个活动。处理此问题的最佳做法是什么。请帮帮我。过去两天我一直在做这件事。提前准备好Android 如果internet连接中断,如何继续进行此活动(而不是进行其他活动)?,android,android-activity,Android,Android Activity,我有一个非常常见的问题,我想每个安卓开发人员都会遇到这个问题。我正在制作一个从web服务器加载数据的应用程序。因此,互联网连接正在被使用。但我必须在每次呼叫服务器之前检查互联网连接。我正在使用ConnectivityManager进行这项工作,它可以正常工作 我的问题实际上是在互联网连接丢失时通知用户。我想向用户显示一个AlertDialog(警报)对话框,告诉他internet连接已断开。现在的问题是,如果用户单击一个按钮并且必须启动一个新的活动(这将从服务器加载数据),那么我就无法向他显示调
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.backIcon:
navigateMenuScreen(view);
break;
}
}
以下是我如何检查互联网连接(并且工作正常):
这是导航方法:
public void navigateMenuScreen(View view){
try {
Intent loginIntent = new Intent(view.getContext(), MenuActivity.class);
startActivityForResult(loginIntent, 0);
overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
} catch(Exception ex) {
}
}
我的问题是,我是否必须在每种导航方法中检查互联网连接(还有类似于上述方法的其他方法),还是有更好的方法?注册
registerReceiver(mConnReceiver,
new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
听着:
private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);
NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);
// do application-specific task(s) based on the current network state, such
// as enabling queuing of HTTP requests when currentNetworkInfo is connected etc.
}
};
别忘了你的清单文件
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
寄存器
registerReceiver(mConnReceiver,
new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
听着:
private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);
NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);
// do application-specific task(s) based on the current network state, such
// as enabling queuing of HTTP requests when currentNetworkInfo is connected etc.
}
};
别忘了你的清单文件
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
可能的解决方案(假设您是为Android 3.0+开发的)是使用AsyncTaskLoader
()。这意味着当用户按下Activity1上的按钮时,您将启动一个“后台”任务来检索您的数据。成功下载数据后,它可以显示activivty2
这将保证在显示Activity2
时显示数据,但不能保证立即显示Activity2
(或者根本不显示,具体取决于您的编写方式)
我不确定这是否是您想要的,但值得一读。可能的解决方案(假设您是为Android 3.0+开发的)是使用AsyncTaskLoader
()。这意味着当用户按下Activity1上的按钮时,您将启动一个“后台”任务来检索您的数据。成功下载数据后,它可以显示activivty2
这将保证在显示Activity2
时显示数据,但不能保证立即显示Activity2
(或者根本不显示,具体取决于您的编写方式)
我不确定这是否正是您想要的,但值得一读。没有代码,我们无能为力。请显示您的代码。另外,请保持简短,您有更好的机会收到答案这里的问题是,如果您对
活动1
执行检查,发现存在连接,然后启动活动2
,无法保证在Activity2
开始使用连接时仍有连接。很可能会有,但不确定。@nandeesh:下次我会记住的。@Basic:所以我们没有解决这个问题的可行方案?没有代码我们就无能为力。请显示您的代码。另外,请保持简短,您有更好的机会收到答案这里的问题是,如果您对活动1
执行检查,发现存在连接,然后启动活动2
,无法保证在Activity2
开始使用连接时仍有连接。很可能会有,但不确定。@nandeesh:下次我会记住的。@Basic:所以我们没有一个可行的解决方案来解决这个问题?Thanx伙计。我使用它并在连接丢失时显示警报对话框。所以现在我不必考虑活动渲染。我不让用户做任何事情,如果互联网连接丢失。我只是显示一个带有“重试”按钮的持久对话框。所以用户要么重试,要么在设备设置中查找他的互联网连接。Thanx dude。我使用它并在连接丢失时显示警报对话框。所以现在我不必考虑活动渲染。我不让用户做任何事情,如果互联网连接丢失。我只是显示一个带有“重试”按钮的持久对话框。所以用户要么重试,要么在设备设置中查找其internet连接。