web-dev-qa-db-ja.com

Androidデバイスを常にウェイクモードにする方法は?

デバイスのルートが成功した後。ここで、デバイスを常にウェイク状態にする必要があります。つまり、常にUIが表示され、黒い画面や空想の画面は表示されません。そうするために、私は次のことを達成しなければならないと思います:

  1. ロック画面なし-オフ
  2. スリープを「しない」に設定
  3. Daydreamが「オフ」に設定

私が見つけたのは、すべてアプリケーション層に関するものです。つまり、上記のタスクを実行できるアプリケーションがいくつかあります。しかし、私のモバイルはルート化されているので、システムファイルで達成したいので、他のアプリケーションが上記の機能を変更しようとしても、変更できないはずです。

19
Chitrang
  1. 開発者モードをアクティブにする
  2. 開発者向けオプションに移動
  3. 「起きている」をオンにする
7

あなたの主なユースケースは次のように思われます(あなたの質問から)

他のいくつかのアプリケーションが上記の機能を変更しようとしても、変更できないはずです。

PowerManager.WakeLock を定期的にトリガーするシステムサービスを作成できます。 ( ソース

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

// screen and CPU will stay awake during this section

wl.release();

サービスを最適化するために、画面のタイムアウトを定期的に可能な最大値に設定して、手動で変更した場合でもリセットされるようにすることもできます。 (最大許容量がわからない場合は、試行錯誤して確認する必要があります)

  /**
   * set screen off timeout
   * @param screenOffTimeout int 0~6
   */
private void setTimeout(int screenOffTimeout) {
    int time;
    switch (screenOffTimeout) {
    case 0:
        time = 15000;
        break;
    case 1:
        time = 30000;
        break;
    case 2:
        time = 60000;
        break;
    case 3:
        time = 120000;
        break;
    case 4:
        time = 600000;
        break;
    case 5:
        time = 1800000;
        break;
    default:
        time = -1;
    }
    Android.provider.Settings.System.putInt(getContentResolver(),
            Settings.System.SCREEN_OFF_TIMEOUT, time);
}

ソース

フレームワークを変更する必要があると思います... framework.jarをビルドしてデバイスにプッシュします。

このリンクを参照して、フレームワークコードを変更する方法を知ることができます- Modify Java code in framework.jar and https://devmaze.wordpress.com/2011/01/18/using-com-Android-internal-part-2-hacking-around /

私が考えることができる他の代替手段は、デバイスを制御するための特権APIを持つAirwatch/SOTI/SAP AfariaのMDM(モバイルデバイス管理)ソリューションを使用することです。

2
rupesh jain

質問を注意深く読んだ後、プログラムによる解決策を探していないことがわかりました。この機能を自動的に実現するためにシステムファイルを変更することで、アプリをインストールする必要はありません。

基本的に、PowerManagerクラスによってメソッドを他のアプリに公開しているファイルを変更して、スリープ時間とウェイクロックを制御する必要があります。ここで知っておく必要がある2つのこと:

  1. 探しているシステムファイルは、テキストやその他の形式ではなく、jar形式で入手できます。
  2. どういうわけかあなたがそのファイルを見つけてそれで遊び始めるならば、あなたはAndroidフレームワークのコンパイルされたバージョンを壊してしまうでしょう、そしてあなたの電話はその後誤動作するかもしれません。

結論これを行うことで何かトリッキーなことをしたいのですが、残念ながらこの方法では実行できません。そのファイルで遊んでも、PowerManagerクラスによって処理される電話のすべての操作が実行されます。あなたと遊び始めます。 :)

1
Irfan Raza

特定のビューでスリープモードを防ぐには、そのビューでsetKeepScreenOn(true)を呼び出すか、keepScreenOnプロパティをtrueに設定します。

次に、ビューが画面に表示されているときに画面が消えるのを防ぎます。これは、WAKE_LOCK権限(または特別な権限)を必要とせずに機能します。これは、ここでのより良い方法です。

また、これにより、アプリケーションの有効期間外に電話がスリープ状態のままになることはありません。 WakeLockでその問題に遭遇する可能性があります

上記の方法を別のアプローチと統合して、完全なソリューション(アプリケーション層の外)を取得できます。

ルートシェル(adb Shellなど)から、次の方法でロックできます。

echo mylockname >/sys/power/wake_lock 

After which the device will stay awake, until you do:

echo mylockname >/sys/power/wake_unlock    

'mylockname'と同じ文字列。

これは画面が真っ暗になるのを防ぐことはできませんが、CPUがスリープするのを防ぐことに注意してください。

ご了承ください /sys/power/wake_lockは、ユーザー無線(1001)とグループシステム(1000)の読み取り/書き込みであり、もちろんルートです。

出典: https://lwn.net/Articles/479841/

ソース: https://stackoverflow.com/a/18968753/312512

1
DeJaVo

Adb Shellコマンドを使用して画面のタイムアウトを増やしたい場合は、以下の手順に従ってください。

ステップ

  1. USBデバッグをオンにする
  2. USBケーブルを介してAndroidデバイスを接続します
  3. ディレクトリをAndroid-sdk/platform-tools /に変更します
  4. ターミナルチェックでは、以下のコマンドを使用してデバイスを接続します:$ adb devices
  5. 画面タイムアウトコマンドを発行します:$ adb Shell settings put system screen_off_timeout 60000

60000 = 1分

0
PalFS