2

所以我有一个音乐应用程序,它可以不断地从服务器下载数据并在手机上播放。

问题:几分钟后音乐停止,显然是因为 Android 进入睡眠状态并停止了所有数据传输。连接甚至没有关闭,阅读线程只是暂停了。仅供参考,我在以前台模式运行的服务中运行它。我还获得了一个PARTIAL_WAKE_LOCK.

但是,部分唤醒锁只能阻止 CPU 进入睡眠状态,而不是网络连接。解决方案似乎是获得一个FULL_WAKE_LOCK有效的但具有丑陋的副作用,即明亮且耗能的屏幕保持不变。

似乎主要的音乐应用程序(如 Pandora)也在做同样的事情。

那么问题来了:有没有更好的方法让安卓保持互联网连接?是否有某种方法/解决方法来实现INTERNET_WAKE_LOCK

4

2 回答 2

2

有两个东西弱锁和wifimanager你也可以使用任何一个来防止进入睡眠模式

PowerManager pm;
PowerManager.WakeLock wakeLock, wakeLock_deamScreen,wakeLock_Full_wake_lock;
WifiLock lock;
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"SleepMode by pressing Power Button");
wakeLock.acquire();
wakeLock_deamScreen = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK| PowerManager.ON_AFTER_RELEASE| PowerManager.ACQUIRE_CAUSES_WAKEUP,"Screen Deam or screen stays on for a little longer");
wakeLock_deamScreen.acquire();
wakeLock_Full_wake_lock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,"");
wakeLock_Full_wake_lock.acquire();

ComponentName receiver = new ComponentName(this,EyeSpyliteActivity.class);
PackageManager packagemanager = getPackageManager();
packagemanager.setComponentEnabledSetting(receiver,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
lock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL, "LockTag");
lock.acquire();

并且不要忘记释放它 onDestroy

@Override
protected void onDestroy() {
 lock.release();
 wakeLock.release();
 wakeLock_deamScreen.release();
 wakeLock_Full_wake_lock.release();
}
于 2013-09-17T04:37:52.657 回答
0

WifiLocks防止网络宕机的。使用WifiManager获取一个createWifiLock。请注意,您应该只在实际下载时使用该锁,因此 Wifi 可能会在只有播放时关闭(如果这种情况适用于您的应用程序)。

于 2013-09-17T03:29:24.093 回答