我可能会以错误的方式解决问题..
我正在做的是在没有互联网连接时显示警告信息,并且“确定”按钮引导用户进入wifi设置以打开互联网。我希望应用程序执行的操作,当用户在更改(或不更改)Internet设置后返回该应用程序时,将重新加载应用程序或活动。
为此,我正在执行以下调用“ok”按钮:
static void startAct(Activity ctxt)
{
ctxt.startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), WIFI_SETTINGS);
}
在活动的类上,显示此消息我有以下内容:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == WIFI_SETTINGS && resultCode == RESULT_OK)
{
this.finish();
Intent myIntent = new Intent(this, MyActivity.class);
startActivity(myIntent);
}
}
但是resultCode始终为0,在按下“ok”按钮后立即调用onActivityResult。
我应该以不同的方式处理这个问题吗?当用户从wifi设置回来时,如何重新加载/刷新我的应用程序?
我检查了类似的答案,但他们似乎在同一个应用中使用了一个活动,因此他们可以拨打set_result(...)
,但我不能在这里做。
谢谢!
答案 0 :(得分:2)
正如其他人所说,你不应该打电话给完 - 同时打电话给startActivityForResult
也没那么有帮助。即使resultCode
不是0,通常也需要几秒钟才能连接到WiFi。
因此,要回答您的问题,您应该使用BroadcastReceiver
并监听网络更改意图。
这段代码有点陈旧,但这与我在其中一个应用程序中做的类似。它应该有希望让你开始。
protected void registerWifiReceivers()
{
IntentFilter f1 = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
IntentFilter f2 = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION;
this.registerReceiver(mReceiver, f1);
this.registerReceiver(mReceiver, f2);
}
final BroadcastReceiver mReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
Log.d ( TAG, "BroadcastReceiver: " + action );
if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))
{
Log.i ( TAG, "handling event: WifiManager.NETWORK_STATE_CHANGED_ACTION action: "+action );
handleWifiStateChange(intent);
}
else if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action))
{
Log.i ( TAG, "ignoring event: WifiManager.WIFI_STATE_CHANGED_ACTION action: "+action );
}
}
}
protected void handleWifiStateChange ( Intent intent )
{
NetworkInfo info = (NetworkInfo)intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (info.getState().equals(NetworkInfo.State.CONNECTED))
{
//do something...
}
}
答案 1 :(得分:1)
plesae不使用
this.finish();
这将完全关闭您的活动。当你使用startActivityForResult()方法时,你应该在onActivityResult()方法之后使用this.finish。
答案 2 :(得分:0)
不要创建新意图。就这样做 -
finish();
startActivity(getIntent());