OnActivityResult всегда возвращает 0 (RESULT_CANCELED) при вызове настроек

Возможно, я неправильно подхожу к проблеме.

То, что я делаю, показывает предупреждающее сообщение, когда нет подключения к Интернету, и кнопка «ok» приводит пользователя к настройке Wi-Fi, чтобы включить Интернет. То, что я хочу, чтобы приложение выполняло, когда пользователь возвращается к нему после изменения (или нет) настроек Интернета, перезагружает приложение или активность там, где он был.

Для этого я делаю следующий вызов для кнопки «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, onActivityResult вызывается сразу после нажатия кнопки «ok».

Должен ли я относиться к этой проблеме по-другому? Как я могу перезагрузить / обновить приложение, когда пользователь вернется из настроек Wi-Fi?

Я проверил похожие ответы, но они, похоже, используют активность в одном приложении, поэтому они могут вызывать set_result(...) , но я не могу этого сделать.

благодаря!

Как говорили другие, вы не должны называть финиш – также вызов 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... } } 

Plesae не используют

  this.finish(); 

Это полностью завершит вашу деятельность. Поскольку вы использовали метод startActivityForResult (), вы должны использовать this.finish после метода onActivityResult ().

Не создавайте новых намерений. Просто сделайте это –

 finish(); startActivity(getIntent());