5

問題があり、検索を行った後、肯定的な解決策が見つかりませんでした。調査の結果、私の問題には実装がないことがわかりましたが、この質問は私の最後のチャンスかもしれません。

何を取得する必要がありますか?

モバイル ネットワークの信号強度に関する情報を取得するアプリケーションがあります。までにし PhoneStateListenerます。もちろん、うまく機能しますが、デバイスがスリープモードになると、リスナーは機能しません:

https://code.google.com/p/android/issues/detail?id=10931 https://code.google.com/p/android/issues/detail?id=7592

WakeLockデバイスがタイムアウトによってオフになった場合にのみ、問題を解決します。ハード電源ボタンを押すと、デバイスもスリープモードになります。電源ボタンのアクションをオーバーライドすることはできません。

私の目標は、デバイスが有効になっているときに常に強度信号を取得することです。モードは問いません。常にデータを収集する必要があります。

質問:

何かアイデアはありますか?それを達成する方法は?これを行う方法はありますか、またはいくつかのハックがある可能性がありますか? すべての解決策は大歓迎です。有益な経験があれば、これを共有してください。

助けてくれてありがとう!!! このトピックでこの問題に関する完全な情報が得られることを願っています。

4

4 に答える 4

1

CommonsWare のロケーション ポーリングの例は、電話のスリープを解除して再びスリープ状態にすることについて非常に優れています。見てみると役立つと思います:https://github.com/commonsguy/cwac-locpoll

于 2013-07-08T20:06:59.903 に答える
0

Android issue 10931 の考えられる回避策の 1 つはandroid.intent.action.SCREEN_ON、画面がオフになった後にインテントを「電話」プロセスに送信することです。

  1. BroadcastReceiver画面がオフになったときに通知をリッスンするための作成と登録

    start(Context context) {
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        context.registerReceiver(mScreenReceiver, filter);
    }
    
    final BroadcastReceiver mScreenReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(final Context context, final Intent intent) {
            if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
                Log.v(LOGTAG, "Screen is off. Running workaround");
                new Thread(mReportScreenIsOnRunnable).start();
            }
        }
    };
    
  2. SCREEN_ON電話プロセスのみにインテントを送信します。

    public final Runnable mReportScreenIsOnRunnable = new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            try {
                Runtime.getRuntime().exec(new String[] { "su", "-c",
                        "am broadcast -a android.intent.action.SCREEN_ON com.android.phone" });
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    };
    

このインテントを受け取った後、電話プロセスはセル位置の更新の送信を再開します。

root 権限が必要です。

このソリューションは少しハックで危険であり、すべての電話で機能するとは限りません。消費電力が高くなる可能性がありますが、画面をオンにしておく場合よりもそれほど多くはありません.

于 2014-11-23T15:35:36.260 に答える