シンプルな音楽プレーヤーとビデオプレーヤーを作る
マルチメディアファイルを再生する
- Android は、オーディオとビデオの再生において非常に優れたサポートを提供しており、非常に完全な API セットを提供しているため、開発者は簡単なオーディオまたはビデオ プレーヤーを簡単に作成できます。
オーディオを再生
- Android でのオーディオ ファイルの再生は、通常、MediaPlayer クラスを使用して実装されます。このクラスは、さまざまな形式のオーディオ ファイルに対して非常に包括的な制御方法を提供するため、音楽の再生作業が非常に簡単になります。次の表に、MediaPlayer クラスの一部を示します。より一般的には使用した方法
MediaPlayer のワークフロー
- まず、MediaPlayer オブジェクトを作成し、次に setDataSource() メソッドを呼び出してオーディオ ファイルの再生パスを設定し、次に prepare() メソッドを呼び出して MediaPlayer を準備状態にする必要があります。
- 次に、start() メソッドを呼び出してオーディオの再生を開始し、pause() メソッドを呼び出して一時停止し、reset() メソッドを呼び出して再生を停止します。
プロジェクト例
- 新しい PlayAudioTest プロジェクトを作成してから、activity_main.xml のコードを変更します。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/play"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Play" />
<Button
android:id="@+id/pause"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Pause" />
<Button
android:id="@+id/stop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Stop" />
</LinearLayout>
- 再生、一時停止、停止を表す 3 つのボタンが定義されています
- MediaPlayer を使用して、ネットワーク、ローカル、およびアプリケーション インストール パッケージでオーディオを再生できます。次の例では、アプリケーション インストール パッケージでオーディオを再生します。
- AS を使用すると、プロジェクト プロジェクトにアセット ディレクトリを作成し、このディレクトリの下に任意のファイルとサブディレクトリを保存できます. これらのファイルとサブディレクトリは、プロジェクトがパッケージ化されるときにインストール ファイルにパッケージ化され、プログラムで使用できます。 AssetManager クラスによって提供されるインターフェイスは、assets ディレクトリ内のファイルを読み取ります。
- 以下に assets ディレクトリを作成します。このディレクトリは、java および res ディレクトリと同じレベルの app/src/main ディレクトリの下に作成する必要があります。app/src/main->new->Directory を右クリックし、Enter を押します。ポップアップダイアログボックスで「assets」をクリックすると、ディレクトリが作成されます。
- 次に音声リソースを用意し、このディレクトリの下に置きます。
- 次に、MainActivity のコード ロジックを変更します。
package com.zb.playaudiotest
import android.media.MediaPlayer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private val mediaPlayer = MediaPlayer()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initMediaPlayer()
play.setOnClickListener {
if (!mediaPlayer.isPlaying) {
mediaPlayer.start()
}
}
pause.setOnClickListener {
if (mediaPlayer.isPlaying) {
mediaPlayer.pause()
}
}
stop.setOnClickListener {
if (mediaPlayer.isPlaying) {
mediaPlayer.reset()
initMediaPlayer()
}
}
}
override fun onDestroy() {
super.onDestroy()
mediaPlayer.stop()
mediaPlayer.release()
}
private fun initMediaPlayer() {
val assetManager = assets
val fd = assetManager.openFd("music.mp3")
mediaPlayer.setDataSource(fd)
mediaPlayer.prepare()
}
}
- クラスが初期化されたら、MediaPlayer のインスタンスを作成し、onCreat() メソッドで initMediaPlayer() メソッドを呼び出して MediaPlayer オブジェクトを初期化します。
- initMediaPlayer() メソッドでは、最初に getAssets() メソッドを通じて AssetManager のインスタンスを取得します。Assmanager を使用して、アセット ディレクトリ内の任意のリソースを読み取り、次に opedFd() メソッドを呼び出してオーディオ ファイル ハンドルを開き、次にsetDataSource( ) メソッドと prepare() メソッドを呼び出して、mediaPlayer の再生を準備します。
- 次に、単純な開始、一時停止、および停止ロジックに対応する各ボタンのクリック イベントがあります。
- 最後に、onDestroy() メソッドで、stop() メソッドと release() メソッドをそれぞれ呼び出して、MediaPlayer に関連するリソースを解放する必要もあります。
- そんなシンプルな音楽プレイヤーが完成。
動画を再生します
- 動画の再生は、主に VideoView クラスを使用して実装されます. このクラスは、動画の表示と制御を統合します. これだけで簡単な動画プレーヤーを完成させることができます. VideoView の使い方は MediaPlayer の使い方と似ています. 一般的なメソッドを次の表に示します.
プロジェクト例
- 新しい PlayVideoTest プロジェクトを作成し、activity_main.xml ファイルのコードを変更します。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/play"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="play" />
<Button
android:id="@+id/pause"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="pause" />
<Button
android:id="@+id/replay"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="replay" />
</LinearLayout>
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
- このレイアウト ファイルには、動画の再生、一時停止、再生を制御するための 3 つのボタンも配置されています。
- 次は動画リソースの保存の問題ですが、残念ながら VideoView は assets ディレクトリ内の動画リソースの直接再生をサポートしていないため、他の解決策しか見つかりません。
- res ディレクトリを使用すると、ビデオやオーディオなどのファイルも保存できる別の raw ディレクトリを作成でき、VideoView はこのディレクトリ内のビデオ リソースを直接再生できます。
- app/src/main/res->New->Directory を右クリックし、ポップアップ ダイアログ ボックスに「raw」と入力し、raw ディレクトリの作成を完了し、再生するビデオ リソースをその中に配置する必要があります。 raw に保存されるファイル名には大文字を使用できないことに注意してください。
- 次に、MainActivity のコードを変更します
package com.zb.playvideotest
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val uri = Uri.parse("android.resource://$packageName/${
R.raw.video}")
videoView.setVideoURI(uri)
play.setOnClickListener {
if (!videoView.isPlaying) {
videoView.start()
}
}
pause.setOnClickListener {
if (videoView.isPlaying) {
videoView.pause()
}
}
replay.setOnClickListener {
if (videoView.isPlaying) {
videoView.resume()
}
}
}
override fun onDestroy() {
super.onDestroy()
videoView.suspend()
}
}
- onCreat() メソッドでは Uri.parse() メソッドを呼び出し、raw ディレクトリ内の video.map ファイルを Uri オブジェクトにパースします ここで使用する書き込み方法は、Android で必要な固定の書き込み方法です。
- 次に、VideoView の setVideoURI() メソッドを呼び出して、解析したばかりの Uri オブジェクトを渡し、VideoView の初期化を完了します。
- 次に、各ボタンのクリック イベントがあり、最後に、videoView の suspend() メソッドが onDestory() メソッドで呼び出され、VideoView によって占有されているリソースが解放されます。
- このようなシンプルなビデオプレーヤーが作成されます