2

そのため、サーバーからデータを継続的にダウンロードして電話で再生する音楽アプリがあります。

問題: 数分後に音楽が停止します。Android がスリープ状態になり、すべてのデータ転送が停止したためと思われます。接続は閉じられておらず、読み取りスレッドは単に一時停止されています。参考までに、フォアグラウンド モードで実行されているサービスでこれを実行しています。も取得しましたPARTIAL_WAKE_LOCK

ただし、部分的なウェイク ロックは、ネットワーク接続ではなく、CPU がスリープ状態になるのを防ぐだけです。解決策は、機能する a を取得することFULL_WAKE_LOCKですが、明るくてエネルギーを消費する画面が表示されたままになるという醜い副作用があります。

主要な音楽アプリ (Pandora など) も同じことをしているようです。

質問: インターネット接続を維持するために Android を取得するためのより良い方法はありますか? 達成するための方法/回避策はありINTERNET_WAKE_LOCKますか?

4

2 に答える 2

2

弱いロックとwifimanagerの2つがあり、スリープモードを防ぐためにいずれかを使用できます

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 に答える