8

私は間違った方法で問題に取り組んでいる可能性があります。

私がやっていることは、インターネット接続がなく、「OK」ボタンがユーザーをwifi設定に導き、インターネットをオンにしたときにアラートメッセージを表示することです。ユーザーがインターネット設定を変更した後(または変更しなかった後)にアプリケーションに戻ったときに、アプリケーションに実行させたいのは、アプリケーションまたはアクティビティを元の場所にリロードすることです。

このために、私は「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が呼び出されます。

この問題に別の方法でアプローチする必要がありますか?ユーザーがWi-Fi設定から戻ってきたときに、アプリをリロード/更新するにはどうすればよいですか?

同様の回答を確認しましたが、同じアプリ内でアクティビティを使用しているようで、電話をかけることができますset_result(...)が、ここではできません。

ありがとう!

4

3 に答える 3

2

他の人が言っているように、あなたはフィニッシュを呼ぶべきではありません-また、呼び出すことstartActivityForResultはそれほど役に立ちません。resultCodeが0以外の場合でも、通常はWiFiに接続するのに数秒かかります。

したがって、質問に答えるには、を使用しBroadcastReceiverてネットワーク変更の意図を聞く必要があります。

このコードは少し古いですが、これは私のアプリの1つで行っているのと似ています。うまくいけば、始めることができます。

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

plesaeは使用しません

          this.finish();

これにより、アクティビティが完全に終了します。startActivityForResult()メソッドを使用したので、onActivityResult()メソッドの後にthis.finishを使用する必要があります。

于 2012-09-26T18:11:47.210 に答える
0

新しいインテントを作成しないでください。これを行うだけです-

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