アプリによっては、長時間放置したまま画面を点灯したままにしたいことがあります。これをアプリで制御すること可能です。ただし、スマートフォンにとって画面点灯はバッテリ消費の一番の要因であるため、使い方に注意が必要です。今回のメモは、アプリの中で特定の画面が表示されている間のみスリープにならないよう(画面を点灯したまま)にする方法についてです。
それでは、さっそく参りましょう。
レイアウトファイル側で画面点灯を維持する場合
レイアウトファイルで画面点灯を維持するには、Viewの属性「android:keepScreenOn」に「true」を設定します。値には「false」も設定できるようですが、使う場面が思い浮かびません。
レイアウトファイル(\app\src\main\res\layout\activity_main.xml)
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/how_are_you"/>
</LinearLayout>
これで、レイアウトに activity_main.xmlを指定した Activityが表示されている間は、画面点灯が維持されます。
実行ファイル側で画面点灯を維持する場合
定義には「FLAG_KEEP_SCREEN_ON」を使い、その書式は定型です。「getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)」という1行をonCreate()メソッドに追加します。あと WindowManagerを importする必要がありますが、Android Studioの場合、Alt + Enterで自動補完してくれます。これでMainActivityが表示されている間、画面点灯が維持されます。
実行ファイル(\app\src\main\java\jp\co\monoworks\TEST\MainActivity.java)
package jp.co.monoworks.test;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
WindowManager.LayoutParams | Android Developers
もし、同じ Activity内の別の指示によって、画面点灯キープをOFFにしたい場合は、下記の1行を追加します。
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
実際の画面(ただ点灯し続けているだけです。はい)
【参考サイト】
コメント
コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)