2015-04-16 1 views
0

Я пытаюсь отключить Wi-Fi, когда вы не подключаетесь к какой-либо сети через минуту. Но возникают проблемы. Когда я запустил приложение. Он начинает работать и пытается отключить Wi-Fi, который не подключается к какой-либо сети. Я не могу это остановить. У меня есть функция предпочтения с CheckBoxPreference. Это настройка для включения/выключения этой функции. Я хочу работать только тогда, когда пользователь установил флажок. Если снимите флажок, перестаньте работать. Но сейчас, он работает в любое время из-под контроля. CheckBox не работает для включения/выключения функции. Вот мой код. Что не так с mycode? Пожалуйста, помогите мне.Android CheckboxPreference не работает с Broadcast Reciever

MyActivity.java

public class MyActivity extends PreferenceActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.layout.prefes); 

     Preference preference = (Preference) findPreference(Strings.SETTINGS_WIFI_TIMEOUT); 

     preference 
       .setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

        @Override 
        public boolean onPreferenceChange(Preference preference, 
          Object object) { 
         if (Boolean.TRUE.equals(object)) { 
          Intent intent = new Intent(getApplicationContext(), 
            MyService.class); 
          startService(intent); 
         } else { 
          stopService(new Intent(getApplicationContext(), 
            MyService.class)); 
          Toast.makeText(getApplicationContext(), 
            "Stop service", Toast.LENGTH_SHORT).show(); 
         } 
         return true; 
        } 
       }); 

    } 
} 

MyService.java

public class MyService extends Service { 
    int mStartMode; // indicates how to behave if the service is killed 
    IBinder mBinder; // interface for clients that bind 
    boolean mAllowRebind; // indicates whether onRebind should be used 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // A client is binding to the service with bindService() 
     return mBinder; 
    } 

    @Override 
    public void onRebind(Intent intent) { 
     super.onRebind(intent); 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     // The service is starting, due to a call to startService() 
     Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); 

     WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
     ConnectivityManager cm = (ConnectivityManager) MyService.this 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
     boolean isConnected = activeNetwork != null 
       && activeNetwork.isConnectedOrConnecting(); 

     if (isConnected) { 

     } else { 
      wifiManager.setWifiEnabled(false); 
     } 

     return Service.START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 
    } 
} 

WifiWatcher.java

public class WiFiWatcher extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent arg1) { 
     ConnectivityManager cm = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 

     WifiManager wifiManager = (WifiManager) context 
       .getSystemService(Context.WIFI_SERVICE); 
     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
     boolean isConnected = activeNetwork != null 
       && activeNetwork.isConnectedOrConnecting(); 

     if (isConnected) { 

     } else { 
      wifiManager.setWifiEnabled(false); 
     } 

    } 
} 

manifest.xml

<receiver android:name="com.example.example.service.WiFiWatcher" android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
     <action android:name="android.net.wifi.STATE_CHANGE" /> 
    </intent-filter> 
</receiver> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > 
</uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
+0

@dora Да, у меня есть. Я обновил файл манифеста. – 89030943809

ответ

0

Я думаю, вы должны войти в обе эти разрешения также

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 
+0

У меня уже есть. Мои проблемы не в этом. Я столкнулся с тем, что CheckBoxPreference не работает. Я хочу начать процесс проверки checkBoxPreference. а затем Непроверенный процесс остановки работы. – 89030943809