Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调用设置时,onActivityResult始终返回0(结果\u已取消)_Android_Android Activity - Fatal编程技术网

Android 调用设置时,onActivityResult始终返回0(结果\u已取消)

Android 调用设置时,onActivityResult始终返回0(结果\u已取消),android,android-activity,Android,Android Activity,我可能用错误的方法处理这个问题 我所做的是在没有互联网连接时显示一条警告消息,“确定”按钮会引导用户进入wifi设置以打开互联网。当用户在更改(或不更改)internet设置后返回应用程序时,我希望应用程序执行的操作是重新加载应用程序或活动 为此,我对“ok”按钮执行以下调用: 在显示此消息的活动类上,我有以下内容: public void onActivityResult(int requestCode, int resultCode, Intent data) { super.on

我可能用错误的方法处理这个问题

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

为此,我对“ok”按钮执行以下调用:

在显示此消息的活动类上,我有以下内容:

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在按下“ok”按钮后立即被调用

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

我检查了类似的答案,但他们似乎在同一个应用程序中使用了一个活动,因此他们可以调用
set\u result(…)
,但我不能在这里这样做


谢谢

不要创建新的意图。就这么做吧-

finish();
startActivity(getIntent());
请不要使用

          this.finish();

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

正如其他人所说,您不应该调用finish——同时调用
startActivityForResult
也没有多大帮助。即使
resultCode
不是0,通常也需要几秒钟才能连接到WiFi

因此,要回答您的问题,您应该使用
广播接收器
,倾听网络更改意图

这段代码有点旧,但我在我的一个应用程序中做了一些类似的事情。希望它能让你开始

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

}

如果wifi现在已打开,为什么不直接检查ActivityResult上的
。不管它返回什么值。我可以这样做,但在我按下“确定”按钮后会立即调用onActivityResult,因此用户在调用之前没有时间更改设置。哪个确定按钮?我以为你在Wifi设置屏幕上的意思是ok。返回的requestCode是否与WIFI_设置相同?您似乎使用了错误的意图来启动它。您可能希望使用Settings.ACTION\u WIFI\u Settings.ok按钮指的是我在没有连接时发出的警报消息的按钮。该按钮的onClick方法调用startAct(this)。即使我更改了打开的设置,仍然存在相同的问题这并不能解决问题,因为onActivityResult会立即被调用,并且结果代码仍然相同:0在您的情况下,startactivityforresults可能不是很有用。您应该在返回时检查wifi是否正常工作,并相应地刷新活动。
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...
    }

}