2015-04-16 174 views
0

我試圖禁用Wifi時,沒有連接到任何網絡後一分鐘。但遇到一些問題。 當我運行該應用程序。它開始工作,並嘗試禁用不連接到任何網絡的WiFi。這意味着我無法阻止它。我有一個首選活動CheckBoxPreference。這是打開/關閉此功能的設置。我只想在用戶選中複選框時工作。如果取消選中,請停止工作。但現在,它在任何時候都失去控制。 CheckBox對打開/關閉功能不起作用。 這是我的代碼。 mycode有什麼問題?請幫幫我。Android CheckboxPreference不支持廣播接收器

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是的,我有。我更新了Manifest文件。 – 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上的進程進行檢查。然後Unchecked停止進程工作。 – 89030943809