[Android/Kotlin] アプリの画面をスリープさせない/動画再生中はスリープを無効にする


こんにちは、スィンです。

以下は、Androidアプリの画面をスリープさせない方法です。

 

ソースコードで FLAG_KEEP_SCREEN_ON を使う方法

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    }
    ...
}

layout.xml に android:keepScreenOn=”true” 属性を追加するやり方

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:keepScreenOn="true">
   ...
</RelativeLayout>

 

動画再生中はスリープを無効にし、動画終了時にスリープを再有効化にする方法

Google/ExoPlayer を使った「ツイッターのTweecha v72.8」でのやり方です。

動画を見ながら寝落ちしてしまうことも考えて、動作再生終了時にはスリープが有効になるように配慮します。

動画再生開始時だけでなくシークバーを動かした時も、STATE が必ず一度 BUFFERING になりますので STATE_BUFFERING でスリープを無効にしています。

class VideoPlayerActivity : AppCompatActivity() {

    fun playVideo(url: String) {
      val bandwidthMeter             = DefaultBandwidthMeter()
      val videoTrackSelectionFactory = AdaptiveTrackSelection.Factory(bandwidthMeter)
      val trackSelector              = DefaultTrackSelector(videoTrackSelectionFactory)
      val player                     = ExoPlayerFactory.newSimpleInstance(this, trackSelector)

      val dataSourceFactory          = DefaultDataSourceFactory(this, "sinProject video player")
      val extractorsFactory          = DefaultExtractorsFactory()
      val mediaSource                = ExtractorMediaSource(Uri.parse(url), dataSourceFactory, extractorsFactory, null, null)

      player.playWhenReady           = true
      simple_exo_player_view.player  = player

      player.prepare(mediaSource)
      player.addListener(object: Player.EventListener {
         override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
            when (playbackState) {
               Player.STATE_ENDED     -> window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
               Player.STATE_BUFFERING -> window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
            }
         }
         ...
      })
   }
}

 

参考

使う人も自分も楽しくなるアプリ制作を心がけてます。趣味は楽器演奏、映画・アニメ・ドラマ鑑賞とゲーム。特にタイムトラベルものが好き。

業務系SEとしてWindows/Webシステム開発を15年以上やってましたが、今は一般向けAndroid/iOSアプリ開発がメインです。

0

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)