2

私のアプリでは、ストック ダイヤラーの機能を複製する必要があります。近接センサーが電話が顔に近づいたことを検出すると、画面をオフにし、電話を顔から離すと再びオンにします。

このスレッドには、部分的に機能するソリューションがあります。最適ではないプライベート API に依存していますが、さらに悪いことに、私がテストした 3 台のデバイスのうちの 1 台で動作します。Android 4.03以降をターゲットにしており、Galaxy S3、Galaxy Nexus、およびNexus 4に対してテストしています。リンクしたソリューションはGNで動作します。Nexus 4では、それはまったく何もしません(公式のandroidnadroidダイヤラーが同じコードを使用し、そこで機能することを見て、特に不可解だと思います.S3では、wakeLockを取得すると、電源ボタンを押すのと同じアクションを実行するようです. (電話をロックし、近接センサーをオフにします)。

powerManager.goToSleep を呼び出すには、電話のルートを必要とするアクセス許可が必要なため、これはテーブルから外れています。画面の明るさの設定はうまくいかないようです (3 台の電話のいずれでも適切に機能しません。明るさを変えることはできますが、画面を回転させることはできません)。 off) 他の唯一の方法は、さらに別のプライベート API (setScreenState - 私の場合、Mono4Android を使用しているため Java 相互運用性を意味します) のようです。これは、私たちがしてはいけないことの 1 つにすぎませんか? それでも、そのような機能が必要な通話アプリはたくさんあるので、世界のSkype、Vibers&Co.はこれを何らかの方法で理解する必要があり、私は私の知恵の終わりにいるので、洞察をいただければ幸いです. .

4

1 に答える 1

0

その間に私が学んだことは次のとおりです。呼び出し状態がアイドル以外の場合を除き、その特別な wakeLock を取得しようとしないでください。通話がある場合、ロックは機能しますが、落とし穴があります。Google Phones (GN と G4 で試行) では、画面がオフになっていてもアクティビティはアクティブなままです。私の S3 では、ロックを取得すると、アクティビティが停止します (一時停止ではなく... 停止しました!)。したがって、近接センサーをアクティブに保つ方法でコードを記述する必要があります (onPause の後に登録を解除したため、S3 では機能しないと思われました)。あなたにとっては難しいことですが、それでも実行可能です。

于 2013-01-25T18:52:55.363 に答える