0

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 を実行しています。

4

1 に答える 1

0

同じ問題を抱えている他の人のための更新:

Googleはこれがうまくいくはずだと考えているようです:

http://code.google.com/p/android/issues/detail?id=34278

Nexus One は古いので、誰も気にしないと思います。

ただし、注 2 はそうではありません。Samsung の開発者フォーラムで質問しました。彼らも気にしません:

http://developer.samsung.com/forum/board/thread/view.do?boardName=General&messageId=247968#postId247968

私の現在の回避策は、ユーザー設定で、部分的な代わりに完全なウェイクロックを取得するオプションを提供することです。タップすると消える黒い画面で UI を覆うコードを追加しました。バックライトはまだオンですが、これは煩わしさが少なく、画面の焼き付きを防ぎます. 他のライト(容量性ボタン)をオフにすることは可能ですが、私見では、電話が実際にはまだ完全に起動していることをユーザーに知らせるのは「良い」ことです。
デバイスの通常のロック画面のタイムアウトを停止します。手動で電源ボタンを押すとロックされますが、画面がオフになるため、UDP の受信が停止します。ウェイクすると、ユーザーがロックを解除するまでロック画面が永久に表示されたままになります。
したがって、これはユーザーエクスペリエンスが悪いですが、私が見つけた中で最高です.

どんな提案でも大歓迎です。

于 2013-11-24T17:11:53.377 に答える