【问题标题】:Cannot get back from wifi configuration page无法从 wifi 配置页面返回
【发布时间】:2014-01-02 12:08:54
【问题描述】:

我开发了一个非常简单的应用程序,它连接到 wifi 网络,然后做一些事情。

想法是我打开wifi配置页面选择wifi网络。

直到这里我做得很好但是当我按下后退按钮返回我的应用程序时,它会重新加载 wifi 配置页面。

这是我的代码:

public class SetHttp extends Activity {
    public final static String EXTRA_MESSAGE = "com.example.WebcamView.MESSAGE";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_set_http);
        WifiManager mWifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
        if(!mWifi.isWifiEnabled()){
            mWifi.setWifiEnabled(true);
        }
        sendIntent();
    }

    protected void sendIntent(){
        Intent enwifi = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);
        startActivityForResult(enwifi, 3);
    }

    public void sendHttp(View view){
        Intent intent = new Intent(this, WebPage.class);
        EditText editText = (EditText) findViewById(R.id.edit_message);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
         startActivity(intent);
    }
}

我尝试创建 onStart、onRestart... 方法,但应用程序崩溃了。

有什么想法吗?应该使用 startActivityForResult 和 onActivity Result 我应该在 ActivityResult 上写什么?

非常感谢!!

我尝试了一些方法,但没有一个有效。这是我的代码:

public class SetHttp extends Activity {
public final static String EXTRA_MESSAGE = "com.example.WebcamView.MESSAGE";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_set_http);
    WifiManager mWifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
    if(!mWifi.isWifiEnabled()){
        mWifi.setWifiEnabled(true);
    }
    //sendIntent();
}
protected void onStart(){
    super.onStart();
    //sendIntent();
}
protected void onRestart(){
    super.onRestart();
    //sendIntent();
    setContentView(R.layout.activity_set_http);
}
protected void onPause(){
    super.onPause();
    setContentView(R.layout.activity_set_http);
}
protected void onStop(){
    super.onStop();
}
protected void onResume(Bundle savedInstanceState){
    super.onResume();
    setContentView(R.layout.activity_set_http);
    sendIntent();
}

protected void sendIntent(){
    Intent enwifi = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);
    startActivity(enwifi);
}

public void sendHttp(View view){
    Intent intent = new Intent(this, WebPage.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
     startActivity(intent);
}

}

【问题讨论】:

    标签: android system wifi


    【解决方案1】:

    sendIntent(); 将始终被调用。这是onCreate() 中的最后一条语句。如果您只想调用一次,请考虑更改其位置。

    NinjaEdit:你没有(或者至少没有显示,我希望?)onActivityResult(int requestCode, int resultCode, Intent data)。我不确定你是否可以从那里返回任何结果(如果你确定打开 GPS 设置你不能),所以如果你不能,我建议你使用标志(如果是第一次,调用方法,当调用 turn标志,并在返回时决定做什么)。

    【讨论】:

    • 感谢您的回答好吧,我收到了第一条评论,所以您建议我把它放在哪里,这样它就可以完成一次工作,然后我可以返回我的应用程序?
    • 只需设置一个标志 connected=false。而不是 sendIntent();让它 if(!connected) { sendIntent();在 onRestart() 中你可以添加这部分,但要确保它只被调用一次(例如为 firstRun 添加另一个标志),并在 onCreate() 中使其为真。 ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ni = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);如果(ni.isConnected()){连接=真;所以现在当你回来的时候你不应该让它重新开始。
    • 抱歉格式错误,猜测 cmets 对代码不太好。如果我没有解释清楚,请再次询问。
    • 感谢您帮助我。我真的不明白把你说的所有这些东西放在哪里。我还有一个问题。我知道当一个活动调用另一个活动时,当您按下新活动的后退按钮时,它应该带您到上一个活动。假设我将 sendIntent() 放到了 onStart() 中。然后它应该在我第一次运行应用程序时打开,选择我的 wifi 网络,然后当我点击返回时,它会将我带到我的应用程序。这个想法哪里错了??
    • 这就是我告诉你创建另一个标志的原因。在 onStart 中,您不能更改标志,因此您将检查默认选项是否为 false,例如。在 onCreate 中您更改了标志,因此当您转到 Wi-Fi 设置并返回时,该标志将允许 onStart 的检查方法运行。基本上你第一次不会放过它,但以后的任何时候都允许它。如果您不希望它在此之后的任何时间出现,您可以在从 wi-fi 设置窗口返回时随时更改标志。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    相关资源
    最近更新 更多