我有手机在网络上做一些工作,所以我需要一直打开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();
}
我不知道我的问题在哪里?请任何想法??
答案 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中的一个错误。