9

我正在使用以下代码,我的目标是 API-15

android.provider.Settings.System.putInt(cr, 
                        android.provider.Settings.System.WIFI_SLEEP_POLICY, 
                        android.provider.Settings.System.WIFI_SLEEP_POLICY_NEVER);

当代码在平台 API-17 上运行时,我在 logcat 中收到警告,

设置 wifi_sleep_policy 已从 android.provider.Settings.System 移至 android.provider.Settings.Global,值不变。

所以在那之后我所做的就是将我的项目目标设置为 APi-17 并使用此代码

        if(Build.VERSION.SDK_INT < 17)
        {
            android.provider.Settings.System.putInt(cr, 
                        android.provider.Settings.System.WIFI_SLEEP_POLICY, 
                        android.provider.Settings.System.WIFI_SLEEP_POLICY_NEVER);
        }
        else            
        {               
            android.provider.Settings.Global.putInt(cr, 
                    android.provider.Settings.Global.WIFI_SLEEP_POLICY, 
                    android.provider.Settings.Global.WIFI_SLEEP_POLICY_NEVER);

        }

结果,我开始在平台 Api-17 中关注 SecurityException

         java.lang.SecurityException: Permission denial: writing to secure settings requires android.permission.WRITE_SECURE_SETTINGS

然后我检查了 WRITE_SECURE_SETTINGS 权限仅适用于系统应用程序,我无法用它编译我的代码,就好像这个权限只适用于系统应用程序一样。

所以我很困惑我之前得到的警告是错误的,或者我的代码有什么问题,我想让它与 API-17 兼容。

4

1 回答 1

1

不幸的是,从 API-17 开始无法再更改此设置,因为它已被弃用

正如您所说,该WRITE_SECURE_SETTINGS权限仅授予系统应用程序,因此最好的选择是要求用户从 wifi 设置中手动设置此选项:

startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
于 2013-09-13T15:39:48.520 回答