所以我有一个音乐应用程序,可以不断从服务器下载数据并在手机上播放。
问题:
几分钟后音乐停止,显然是因为Android进入睡眠状态并停止所有数据传输。连接甚至没有关闭,读取线程只是暂停。仅供参考,我在以前台模式运行的服务中运行此功能。我还获得了PARTIAL_WAKE_LOCK
。
但是,部分唤醒锁定仅阻止CPU进入休眠状态,而不是网络连接。解决方案似乎是要求FULL_WAKE_LOCK
有效,但有明显的能量饥饿屏幕留下的难看的副作用。
似乎主流音乐应用程序(如Pandora)正在做同样的事情。
所以问题是:
是否有更好的方法让Android保持互联网连接活着?是否有某种方式/解决方法来实现INTERNET_WAKE_LOCK
?
答案 0 :(得分: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();
}
答案 1 :(得分:0)
有WifiLocks
可防止网络崩溃。使用WifiManager
按createWifiLock
获取一个。请注意,您只应在实际下载时使用该锁定,因此只有播放时Wifi才会关闭(如果该情况适用于您的应用程序)。