【问题标题】:Wifi Optimization无线网络优化
【发布时间】:2023-04-04 02:12:01
【问题描述】:

任何人都知道通过代码以编程方式启用/禁用 wifi 优化的任何方法,或者至少检查它是否已启用(以便提示用户)?当启用此功能并且设备进入睡眠状态(尽管唤醒和 wifi 锁定)时,与第三方设备的 wifi 通信停止。

谢谢!

【问题讨论】:

    标签: android android-wifi android-settings


    【解决方案1】:

    设备必须植根才能使用此方法。您的应用确实不需要必须是系统应用,因为我们可以授予自己临时系统应用之类的访问权限。这适用于 API 21 / 4.*,不知道还有什么。

    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/> 添加到AndroidManifest.xml

    互联网可能会告诉您您的应用程序必须是系统应用程序,但您可以忽略这一点,因为这种方法至少在这种情况下解决了这个问题。

    使用此代码(为本文简化)。

    // Grant your app temporary system level like settings access awesomeness
    Runtime.getRuntime().exec("su pm grant <yourpackagename> android.permission.WRITE_SECURE_SETTINGS");
    // Read the value first to see if you need to set it at all
    int curVal = android.provider.Settings.Global.getInt(getContentResolver(),"wifi_suspend_optimizations_enabled",2);
    switch( curVal ) {
      case 0:
        // already disabled
        break;
      case 1:
        // attempt to disable!
        boolean success = android.provider.Settings.Global.putInt(getContentResolver(),"wifi_suspend_optimizations_enabled",0);
        if( success ) {
          // yay worked! maybe check it again to be sure
        }
        else {
          // failed to put
        }
        break;
      case 2:
        // Failed to read value, access not granted
        break;
    }
    

    我从中得到了很多: http://muzso.hu/2013/04/07/changing-android-system-settings-eg.-airplane-mode-radios-via-commandline-on-rooted-phone

    此答案中描述的方法也可用于更改其他受保护的系统设置,但可能很难找到要更改的设置的确切名称。 android-changing-the-system-settings-of-a-rooted-device-from-inside-the-app 提供了有用的信息,即您可以在您选择的 sqlite 编辑器中打开 /data/data/com.android.providers.settings/databases/setting‌​s.db 以查找要更改的设置的表和键名。 wifi_suspend_optimizations_enabled 在全局表中,但这不是唯一可用的表。 wifi优化以外的其他设置可能需要&lt;uses-permission android:name="android.permission.WRITE_SETTINGS"/&gt;

    此信息可能不适用于所有设备或情况。

    【讨论】:

      【解决方案2】:

      目前,无法以编程方式检查 Wifi 优化选项。

      检查有关 wifi API 的类。 http://developer.android.com/reference/android/net/wifi/package-summary.html

      【讨论】:

        【解决方案3】:

        通过 ADB shell(假设 root 访问):

        settings set global wifi_suspend_optimizations_enabled 0
        

        你可以通过在关闭和打开屏幕时观察logcat来验证这是否成功:

        logcat -v time | grep -e wpa | grep SETSUSPENDMODE
        

        如果您在屏幕关闭和打开事件期间看到此值被切换,则 Wifi 优化已启用并正在创建您所看到的问题。一旦禁用此行为应该停止。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-12
          • 1970-01-01
          相关资源
          最近更新 更多