2

私のアプリケーションでは、シェイク イベントを検出したいのですが、SensorEventListener を使用しています。アクティビティがフォアグラウンドで実行されている場合、コードは正常に動作しています。しかし、電話のロックボタンを押して画面をロックすると、シェイクイベントが検出されません。Samsung gts5360 でコードをテストしました。しかし、同じコードがsony ericssion xperia mini proでも問題なく動作しています。実際、デバイスを約 1 分間アイドル状態のままにしておくと、Samsung の携帯電話は振動イベントを検出しません。デバイスをロックしてから 45 秒。

それから私は電話を振って、それは揺れを検出しませんが、数秒遅れて電話を振ると、揺れを聞き始めます。私のサムスンの携帯電話のこの動作は一貫していません. シェイクイベントのリスニングを開始し、ランダムな時間が経過すると停止します。

ここで私の質問は、「これは、画面がロック/オフのときにデバイスが揺れイベントを検出しないという Android の機能ですか?」ということです。

もしそうなら、電話を数秒間ロックした後、私のサムスンの電話はどのようにリスニングを開始/停止しますか?

また、「Sony ericssion Xperia mini pro」で画面のロック/オフ時に揺れイベントを継続して聞くのはどうですか?

この機能はベンダーごとに異なりますか?

誰かが私のコードを必要とする場合は、私に知らせてください。私はそれを提供します。

4

1 に答える 1

0

問題は、長い間、画面が消えたときにセンサーをどうするかについての一貫した基準がなかったことです。一部のデバイスでは動作を継続できますが、そうでないデバイスもあります。最終的に、Androidチームは、Androidチームが機能するためには、この種の操作のために部分的なウェイクロックを取得する必要があると判断しました。

PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
PowerManager.WakeLock lock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SensorRead");
lock.acquire();

この許可が必要です:"android.permission.WAKE_LOCK"

ウェイクロックが終了したら、CPUが完全にスリープ状態になるように、必ずウェイクロックを解除する必要があります。

これらすべてを使用しても、機能しない場合があります。最近のLG電話はバックグラウンドセンサーをサポートする可能性が低いことがわかりました。また、多くのMotorola電話はウェイクロックを必要とせず、代わりに画面が消えたときにセンサーに再登録する必要があります。

于 2012-10-11T13:09:37.313 に答える