4.1.2 を実行している Note 2 または 2.2 を実行している Nexus One を、UDP ブロードキャスト パケットで動作し続けるために画面をオフにして「十分に起動」したままにすることができません。さまざまなウェイクロックと許可を試しました (以下を参照)。2.3 の Desire HD、2.1 の Huawei U8110 (T-Mobile pulse mini)、および 2.2.1 の Samsung Galaxy Mini で正常に動作します。
IP/ポートへの新しい TCP 接続を直接受信して処理しますが、UDP パケットをブロードキャストしません。電源ボタンをタップして画面を復帰させると、すぐにブロードキャストに応答します。画面を強制的にオンにすると(PowerManager.SCREEN_DIM_WAKE_LOCK以上)、リッスンし続けますが、それは実用的ではありません。
私はウェイクロックを取得しています:
powerManager.newWakeLock(PARTIAL_WAKE_LOCK)
wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL)
wifiManager.createMulticastLock()
そしてパーミッションを宣言します:
android.permission.INTERNET
android.permission.WAKE_LOCK
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.CHANGE_WIFI_STATE
システム Wi-Fi スリープ ポリシーは「しない」です。
動作中のデバイスはすべて画面をタイムアウトしますが、UDP ブロードキャストには引き続き応答します。
デバッガーの Threads ビューでは、DatagramSocket.receive() でまだブロックされていることがわかりますが、動作中のデバイスではパケットが返され、その後 logcat に記録されます。
すべてのデバイスが同じ .apk を実行しています。