【问题标题】:How to call Wi-Fi settings screen from my application using Android如何使用 Android 从我的应用程序调用 Wi-Fi 设置屏幕
【发布时间】:2020-12-21 23:59:01
【问题描述】:

通常我会通过单击Settings > Wireless controls > wifi settings 在模拟器上获得 Wi-Fi 设置屏幕。当按下我创建的 Wi-Fi 按钮时,我需要从我的程序直接进入 Wi-Fi 设置屏幕。 Contacts, Call Logs 我们可以使用 Intent.setData(android.provider.contacts.......) 来处理。有没有办法从安卓程序打开设置子菜单/菜单?
请给我建议或示例代码。

【问题讨论】:

    标签: android wifi


    【解决方案1】:

    查看android.provider.Settings 了解一系列Intent 操作,您可以使用这些操作来启动各种设置屏幕(例如ACTION_WIFI_SETTINGS)。

    编辑:添加编码行。

    startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));

    【讨论】:

    • 更具体地说,android.app.activity.startActivity(new android.content.Intent.Intent(android.provider.settings.Settings.ACTION_WIFI_SETTINGS)); 或正确使用startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
    • 你认为FLAG_ACTIVITY_NEW_TASKneeded 吗?
    • @Mr_and_Mrs_D:可能。当设置应用程序已经在内存中时,我可以看到设置应用程序可能无法正确处理这些Intents,但我没有尝试过这种特定情况。
    • 打开一般无线设置使用这个:startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
    • @patrickjason91:“是否有可能应用程序的 Intent 调用可以控制某些配置以显示 WiFi 设置或任何其他设置屏幕的一般显示方式?” -- 不是一般情况,也没有使用任何记录在案的附加内容。
    【解决方案2】:

    例子

    ConnectivityManager manager = (ConnectivityManager) 
            getSystemService(MainActivity.CONNECTIVITY_SERVICE);
    /*
     * 3G confirm
     */
    Boolean is3g = manager.getNetworkInfo(
            ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
    /*
     * wifi confirm
     */
    Boolean isWifi = manager.getNetworkInfo(
            ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
    if (is3g) {
        textView.setText("3G");
    } else if (isWifi) {
        textView.setText("wifi");
    } else {
        textView.setText("nothing");
        // Activity transfer to wifi settings
        startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
    }
    

    【讨论】:

    • 打开 3G 和 WIFI 设置使用这个:Settings.ACTION_WIRELESS_SETTINGS
    【解决方案3】:

    只需调用带有上下文的意图, 试试这个:

    startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));
    

    【讨论】:

      【解决方案4】:

      如果你想从 xml 文件中做:

          <PreferenceScreen
              xmlns:android="http://schemas.android.com/apk/res/android"
              android:key="@string/setting_key"
              android:summary="@string/setting_summary"
              android:title="@string/setting_title" >
      
              <intent 
                  android:action="android.settings.WIRELESS_SETTINGS"/>
          </PreferenceScreen>
      

      这将在您的设置中显示一个条目,该条目将调用平台的设置活动

      【讨论】:

      • 使用android.settings.WIFI_SETTINGS 操作对我有用。
      【解决方案5】:

      如果您使用的是 Android 10,并且您的目标是让用户打开 WiFi,那么您不必再实际导航到 Wifi 设置屏幕。你可以使用Settings Pannel

      一种 API,允许应用在以下情况下向用户显示设置 他们的应用程序。

      Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
      startActivityForResult(panelIntent);
      

      【讨论】:

        【解决方案6】:

        on button click click Listner

        startActivityForResult(new Intent(Settings.ACTION_WIFI_SETTINGS), 0);

        【讨论】:

          【解决方案7】:

          这里是sn-p打开wifi设置页面的代码

           Intent intent = new Intent(Intent.ACTION_MAIN, null);
                  intent.addCategory(Intent.CATEGORY_LAUNCHER);
                  ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.wifi.WifiSettings");
                  intent.setComponent(cn);
                  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                  startActivity( intent);
          

          【讨论】:

          • 在 O 中不起作用我不断收到“android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.settings/com.android.settings.WirelessSettings}; 你声明了这个活动吗在你的 AndroidManifest.xml 中?"
          【解决方案8】:

          我已经在我的应用程序中这样实现它:

               if (Connectivity.isConnected(this)) {
                          SERVER_IP = Connectivity.getIPAddress(true)
                      } else {
                          SERVER_IP = "Not Connected to Network"
                          Snackbar.make(appRoot, "Not Connected to Network", 
                                        Snackbar.LENGTH_INDEFINITE)
                                        .setAction("Open Settings") {
                             //open network settings
                            startActivity(Intent(Settings.ACTION_WIFI_SETTINGS))
                                  }.show()
                      }
                  }
          
          
          public static boolean isConnected(Context context) {
                  NetworkInfo info = Connectivity.getNetworkInfo(context);
                  return (info != null && info.isConnected());
              }
          

          【讨论】:

            【解决方案9】:

            并非所有设备都有相同的 Wifi 设置包名称和类,我使用此代码在大多数 Android 设备上打开 wifi 设置页面:

                        try{
                            Intent intent = new Intent(Intent.ACTION_MAIN, null);
                            intent.addCategory(Intent.CATEGORY_LAUNCHER);
                            ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.wifi.WifiSettings");
                            intent.setComponent(cn);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(intent);
                        }catch (ActivityNotFoundException ignored){
                            startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
                        }
            

            【讨论】:

              猜你喜欢
              • 2014-06-06
              • 2017-11-10
              • 2017-09-14
              • 2011-07-11
              • 2022-07-06
              • 2012-09-04
              • 2014-04-23
              • 1970-01-01
              • 2011-06-21
              相关资源
              最近更新 更多