wi-fi在android 4.1上关闭一段时间后关闭了

时间:2015-07-13 17:05:06

标签: android alarmmanager android-wifi

我有手机在网络上做一些工作,所以我需要一直打开wi-fi,我的手机不应该睡觉。但有时wi-fi连接丢失了,我需要重新连接manuale,所以我决定使用AlarmManager将每小时重新连接到我自己的Wi-Fi网络。 但是5-7天后我的手机丢失了Wi-Fi。它总是“关闭”,我不能打开它。我需要做软件重置!为什么会这样?我注意到在添加一些代码以将每小时重新连接到Wi-Fi网络后出现此问题。所以这就是。 我在manifest.xml中有一些权限

 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>    
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.WAKE_LOCK" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />     
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

我也有AlarmManager计划我的重新连接

    alarmIntent = new Intent(MainActivity.this, TimeReboot.class);

    alarmIntent.putExtra("type", 3);
    alarmIntent.setAction("actionReconnect");

    PendingIntent rpendingIntent = PendingIntent.getBroadcast(MainActivity.this, 3, alarmIntent, 0);

    Calendar rcalendar = Calendar.getInstance();
    rcalendar.setTimeInMillis(System.currentTimeMillis());
    rcalendar.set(Calendar.HOUR_OF_DAY, 6);
    rcalendar.set(Calendar.MINUTE, 25);

    manager.cancel(rpendingIntent);
    manager.setRepeating(AlarmManager.RTC_WAKEUP, rcalendar.getTimeInMillis(),
            1000 * 60 * 60, rpendingIntent);

这里有一些代码用于重新连接我的BroadcastReceiver类的onRecieve方法

            WifiConfiguration wifiConfig = new WifiConfiguration();
            wifiConfig.SSID = String.format("\"%s\"", desiredNetworkSSID);
            wifiConfig.preSharedKey = String.format("\"%s\"", modemwifipass);

            WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
            //remember id
            int netId = wifiManager.addNetwork(wifiConfig);
            wifiManager.disconnect();
            wifiManager.enableNetwork(netId, true);
            wifiManager.reconnect();

此外,我在主要活动的onCreate方法中使用此代码

    wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);

    if(!wifi.isWifiEnabled()) {
         wifi.setWifiEnabled(true); 

    }
    else
    {
         WifiInfo newInfo = wifi.getConnectionInfo();
    }

    // wi-fi always ON
    lock = wifi.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "LockTag");

    if (lock != null) {
        lock.acquire();
            }       


    // shouldn't sleep!
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");

    if (wl != null) {
        wl.acquire();
            }       

我不知道我的问题在哪里?请任何想法??

1 个答案:

答案 0 :(得分:0)

我注意到使用WIFI_MODE_FULL_HIGH_PERF你不需要保持屏幕,但它会消耗更多的电力。

但是,如果你真的需要保持屏幕,我还注意到SCREEN_DIM_WAKE_LOCK是一个不推荐使用的常量,他们建议使用FLAG_KEEP_SCREEN_ON(但这会使屏幕保持亮度)。

除此之外,尝试在强制禁用发生时(createWifiLock)检查"LockTag"的日志:

  

标记:WifiLock的标记,用于在调试消息中识别它。在正常情况下,此字符串永远不会显示给用户,但如果它具有多个WifiLock,则应足以描述您的应用程序及其中的特定WifiLock。

wi-fi被强制禁用这一事实让我想知道,默认情况下,系统是否会在长时间使用时禁用wi-fi ......您需要重置软件这一事实令人不安。这可能是Android中的一个错误。