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 に答える