Android的复选框preference不与广播Reciever工作 [英] Android CheckboxPreference doesn't work with Broadcast Reciever

查看:152
本文介绍了Android的复选框preference不与广播Reciever工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图禁用无线当分钟后无法连接到任何网络。但得到的一些问题。
当我运行的应用程序。它开始工作,并尝试禁用无线网络,这不是连接到任何网络。我不能阻止它这是平均值。我有一个复选框preference A preference活动。它的打开/关闭该功能的设置。我想,当用户签的复选框,才能正常工作。如果取消选中,停止工作。但现在,它的工作随时失控。复选框是开启/关闭功能不起作用。
这里是我的code。有什么不对我的code?请帮我。

MyActivity.java

 公共类MyActivity扩展$ P $ {pferenceActivity    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        加preferencesFromResource(R.layout preFES);        preference preference =(preference)找到preference(Strings.SETTINGS_WIFI_TIMEOUT);        preference
                .setOn preferenceChangeListener(新在preferenceChangeListener(){                    @覆盖
                    公共布尔在preferenceChange(preference preference,
                            Object对象){
                        如果(Boolean.TRUE.equals(对象)){
                            意向意图=新意图(getApplicationContext()
                                    MyService.class);
                            startService(意向);
                        }其他{
                            stopService(新意图(getApplicationContext()
                                    MyService.class));
                            Toast.makeText(getApplicationContext(),
                                    一站式服务,Toast.LENGTH_SHORT).show();
                        }
                        返回true;
                    }
                });    }
}

MyService.java

 公共类的MyService扩展服务{
    INT mStartMode; //指示如何做人,如果该服务被杀害
    的IBinder mBinder; //接口,用于客户端绑定
    布尔mAllowRebind; //表示onRebind是否应使用    @覆盖
    公众的IBinder onBind(意向为arg0){
        //一个客户端)的结合与bindService服务(
        返回mBinder;
    }    @覆盖
    公共无效onRebind(意向意图){
        super.onRebind(意向);
    }    @覆盖
    公共无效的onCreate(){
        super.onCreate();    }    @覆盖
    公众诠释onStartCommand(意向意图,诠释标志诠释startId){        //该服务正在启动,由于对startService()的调用
        Toast.makeText(这一点,服务启动,Toast.LENGTH_SHORT).show();        WifiManager wifiManager =(WifiManager)getSystemService(Context.WIFI_SERVICE);
        ConnectivityManager厘米=(ConnectivityManager)MyService.this
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        的NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        布尔isConnected = activeNetwork!= NULL
                &功放;&安培; activeNetwork.isConnectedOrConnecting();        如果(isConnected){        }其他{
            wifiManager.setWifiEnabled(假);
        }        返回Service.START_STICKY;
    }    @覆盖
    公共无效的onDestroy(){
        Toast.makeText(这一点,做服务,Toast.LENGTH_SHORT).show();
    }
}

WifiWatcher.java

 公共类WiFiWatcher扩展广播接收器{
    @覆盖
    公共无效的onReceive(上下文的背景下,意图ARG1){
        ConnectivityManager厘米=(ConnectivityManager)上下文
                .getSystemService(Context.CONNECTIVITY_SERVICE);        WifiManager wifiManager =(WifiManager)上下文
                .getSystemService(Context.WIFI_SERVICE);
        的NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        布尔isConnected = activeNetwork!= NULL
                &功放;&安培; activeNetwork.isConnectedOrConnecting();        如果(isConnected){        }其他{
            wifiManager.setWifiEnabled(假);
        }    }
}

的Manifest.xml

 <接收机器人:名字=com.example.example.service.WiFiWatcher机器人:启用=真正的>
    &所述;意图滤光器>
        <作用机器人:名字=android.net.wifi.WIFI_STATE_CHANGED/>
        <作用机器人:名字=android.net.wifi.STATE_CHANGE/>
    &所述; /意图滤光器>
< /接收器><使用许可权的android:NAME =android.permission.INTERNET对/>
<使用许可权的android:NAME =android.permission.ACCESS_FINE_LOCATION/>
<使用许可权的android:NAME =android.permission.ACCESS_NETWORK_STATE/>
<使用许可权的android:NAME =android.permission.WRITE_EXTERNAL_STORAG​​E/>
<使用许可权的android:NAME =android.permission.ACCESS_WIFI_STATE>
< /使用许可权>
<使用许可权的android:NAME =android.permission.CHANGE_WIFI_STATE/>
<使用许可权的android:NAME =android.permission.RECEIVE_BOOT_COMPLETED/>


解决方案

我想你应该也进入这两个权限

 <使用许可权的android:NAME =android.permission.ACCESS_WIFI_STATE>< /使用许可权>
<使用许可权的android:NAME =android.permission.CHANGE_WIFI_STATE>< /使用许可权>

I'm trying to disable Wifi when not connect to any network after a min. But getting some problems. When i run the app. It start working and try to disable wifi that's not connect to any network. It's mean I can't stop it. I have a Preference Activity with CheckBoxPreference. It's the setting to turn on/off this feature. I want to only work when user checked the checkbox. If uncheck, stop working. But right now, It's working anytime out of control. CheckBox is doesn't work for turn on/off feature. Here is my code. What is wrong with mycode? Please help me.

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" />

解决方案

I think you should be entering both these permissions also

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

这篇关于Android的复选框preference不与广播Reciever工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆