8

我可能以错误的方式解决问题..

我正在做的是在没有互联网连接时显示警报消息,并且“确定”按钮将用户引导至 wifi 设置以打开互联网。当用户在更改(或不更改)互联网设置后返回它时,我希望应用程序执行的操作是重新加载应用程序或活动所在的位置。

为此,我正在对“确定”按钮进行以下调用:

 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,onActivityResult 在按下“确定”按钮后立即被调用。

我应该以不同的方式处理这个问题吗?当用户从 wifi 设置返回时,如何重新加载/刷新我的应用程序?

我检查了类似的答案,但他们似乎在同一个应用程序中使用了一个活动,所以他们可以打电话set_result(...),但我不能在这里这样做。

谢谢!

4

3 回答 3

2

正如其他人所说,您不应该调用完成 - 调用startActivityForResult也没有那么有用。即使resultCode不是 0,通常也需要几秒钟才能连接到 WiFi。

因此,要回答您的问题,您应该使用 aBroadcastReceiver并监听网络更改意图。

这段代码有点旧,但这是我在我的一个应用程序中做的类似的事情。希望它可以帮助您入门。

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...
    }

}
于 2012-09-26T18:22:30.473 回答
1

请不要使用

          this.finish();

这将完全关闭您的活动。当您使用 startActivityForResult() 方法时,您应该在 onActivityResult() 方法之后使用 this.finish。

于 2012-09-26T18:11:47.210 回答
0

不要创建新的意图。就这样做——

finish();
startActivity(getIntent());
于 2012-09-26T17:39:46.117 回答