回答編集履歴

2

コード追加

2022/06/21 12:09

投稿

jimbe
jimbe

score11363

test CHANGED
@@ -4,3 +4,55 @@
4
4
  再生が終わったら何をさせているかといえば、ビデオの URI を設定して start しているのですから、ループするのは当然ではないでしょうか。
5
5
  ループさせたくないのでしたら、なぜソコに再生のコードが入っているのでしょう。
6
6
 
7
+ ---
8
+ v_0 等が switch になっているということはもっと動画が多いものと思いますが、とりあえず v_0~v_2 等に特化としてコードを整理すると以下のようになりました。
9
+
10
+ ※ テキトウな動画が無かったので動かしていません
11
+
12
+ playVideo メソッドにて、next が有効かどうかで onCompleteListener の登録を変えることでループを防いでいます。
13
+
14
+ ```java
15
+ import androidx.annotation.*;
16
+ import androidx.appcompat.app.AppCompatActivity;
17
+
18
+ import android.content.*;
19
+ import android.content.res.Resources;
20
+ import android.net.Uri;
21
+ import android.os.Bundle;
22
+ import android.widget.VideoView;
23
+
24
+ public class TEST extends AppCompatActivity {
25
+ static final @RawRes int[] videos = new int[]{ R.raw.v_0, R.raw.v_1, R.raw.v_2 };
26
+
27
+ @Override
28
+ protected void onCreate(Bundle savedInstanceState) {
29
+ super.onCreate(savedInstanceState);
30
+ setContentView(R.layout.activity_test);
31
+
32
+ Intent intent = getIntent();
33
+ int listTitle = intent.getIntExtra("ListTitle", 0);
34
+ if(listTitle != 1) throw new IllegalArgumentException("ListTitle=" + listTitle);
35
+ int position = intent.getIntExtra("position", 0);
36
+ if(position < 0 || videos.length <= position) throw new IllegalArgumentException("position=" + position);
37
+
38
+ //videos の動画の再生の後に再生する動画
39
+ @RawRes int next =
40
+ intent.getBooleanExtra("isChecked", false) ? R.raw.v_4
41
+ : intent.getBooleanExtra("isChecked2", false) ? R.raw.v_5
42
+ : intent.getBooleanExtra("isChecked3", false) ? R.raw.v_6
43
+ : Resources.ID_NULL;
44
+
45
+ VideoView v = findViewById(R.id.v2);
46
+
47
+ playVideo(v, videos[position], next);
48
+ }
49
+
50
+ private void playVideo(VideoView v, @RawRes int raw, @RawRes int next) {
51
+ Uri uri = new Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE).authority(getPackageName()).appendPath("" + raw).build();
52
+ v.setVideoURI(uri);
53
+ //url の動画の後に再生が必要ならリスナを登録。不要なら null を登録(=既存を削除)
54
+ v.setOnCompletionListener(next == Resources.ID_NULL ? null : mp -> playVideo(v, next, Resources.ID_NULL));
55
+ v.start();
56
+ }
57
+ }
58
+ ```

1

追加

2022/06/21 10:35

投稿

jimbe
jimbe

score11363

test CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  MediaPlayer.OnCompletionListener の onCompletion(MediaPlayer mp) メソッドは、再生が終わったら呼ばれます。
4
4
  再生が終わったら何をさせているかといえば、ビデオの URI を設定して start しているのですから、ループするのは当然ではないでしょうか。
5
+ ループさせたくないのでしたら、なぜソコに再生のコードが入っているのでしょう。
5
6
 
6
-