2013-12-10 3 views
1

Я пытаюсь проверить, установлено ли WIFI_SLEEP_POLICY на все, кроме WIFI_SLEEP_POLICY_NEVER. Он хорошо работает в некоторых устройствах и эмуляторах, но не работает на других. Например, он работает на эмуляторе Nexus S с API 10, но не в Nexus One эмулятором с API 8. Когда он не работает, я получаю это сообщениене может проверить WIFI_SLEEP_POLICY на некоторых устройствах

12-10 15:57:19.625: W/System.err(477): android.provider.Settings$SettingNotFoundException: wifi_sleep_policy 
12-10 15:57:19.625: W/System.err(477): at android.provider.Settings$System.getInt(Settings.java:807) 

Вот код

WifiManager wm = (WifiManager) m_activity.getSystemService(Context.WIFI_SERVICE); 
    ContentResolver cr = m_activity.getContentResolver(); 
    int policyNever = android.provider.Settings.System.WIFI_SLEEP_POLICY_NEVER; 
    String WIFI_SLEEP_POLICY = android.provider.Settings.System.WIFI_SLEEP_POLICY; 
     try { 
     if(android.provider.Settings.System.getInt(cr, WIFI_SLEEP_POLICY) != policyNever) 
     { 
      if (Build.VERSION.SDK_INT>=17){ 
       showWifiSleepWarning(restartAction); 
       return false; 
      } 
      else 
       android.provider.Settings.System.putInt(cr, WIFI_SLEEP_POLICY, policyNever); 
     } 
    } catch (SettingNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

ответ

0

Интересно, что в то время как GetInt возвращает ошибку, putInt работает отлично. поэтому, если я попытаюсь изменить его, не проверяя его статус, он работает. Конечно, с API 17 и выше это полная противоположность (как задокументировано), поэтому новый код обрабатывает оба этих случая.

 WifiManager wm = (WifiManager) m_activity.getSystemService(Context.WIFI_SERVICE); 
     if(!wm.isWifiEnabled()) 
     { 
      return true; 
     } 
     ContentResolver cr = m_activity.getContentResolver(); 
     int policyNever = android.provider.Settings.System.WIFI_SLEEP_POLICY_NEVER; 
     try 
     { 
      android.provider.Settings.System.putInt(cr, WIFI_SLEEP_POLICY, policyNever); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     try 
     { 
      if(android.provider.Settings.System.getInt(cr, WIFI_SLEEP_POLICY) != policyNever) 
      { 
       //if (Build.VERSION.SDK_INT>=17) 
       showWifiSleepWarning(restartAction); 
       return false; 
      } 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
Смежные вопросы