質問するログイン新規登録

質問編集履歴

4

追記

2020/03/19 03:29

投稿

Ksuke_Android
Ksuke_Android

スコア7

title CHANGED
File without changes
body CHANGED
@@ -92,4 +92,168 @@
92
92
 
93
93
  }
94
94
 
95
+ ```
96
+
97
+
98
+ ### 追記
99
+
100
+ コードが長いので、機能を絞ったアプリを新たに作り、
101
+ コメントで教えていただいたCountDownTimerを拡張したクラスを新しいファイルにコピペしてつかってみました。
102
+
103
+ ![イメージ説明](8f529ff8f60ad54466256df7ab73e633.jpeg)
104
+
105
+ MainActivity.Javaに
106
+
107
+ ```Java
108
+ //BGM
109
+ MediaPlayer bgm;
110
+ //効果音
111
+ MediaPlayer se1;
112
+
113
+ CountDownTimer timer;
114
+
115
+ //BGMが流れているか
116
+ boolean bgmPaused =false;
117
+
118
+
119
+      //アプリ中断時、BGMとカウントダウンを止める
120
+      @Override
121
+ public void onPause() {
122
+ super.onPause();
123
+ bgm.stop();
124
+ bgmPaused = true;
125
+ bgm.release();
126
+
127
+ timer.pause();
128
+
129
+ }
130
+      
131
+
132
+      @Override
133
+  public void onResume() {
134
+ super.onResume();
135
+
136
+ if(bgmPaused) {
137
+ bgm.start();
138
+ bgmPaused = false;
139
+ timer.resume();
140
+ }
141
+ }
142
+
143
+
144
+ ```
145
+
146
+
147
+ アプリ中断時onPauseメソッドだけであれば、BGM、カウントダウンの停止ができるようになったのですが、
148
+ アプリを再び開いたときにBGM、カウントダウンを再開させようとonResumeメソッドを書いたところ、
149
+ アプリを再び開くとアプリが「繰り返し停止しています」と表示されるようになってしまいました。
150
+
151
+ (bgmをpauseしたところから再生再開するメソッドがなさそうだったのでbgm.pauseではなくbgm.stopを使っています)
152
+
153
+ どのように書いたらアプリ再開時にうまく動作するでしょうか?
154
+
155
+
156
+ ↓MainActivity全体
157
+
158
+ ```Java
159
+ package com.example.countdowntimer1;
160
+
161
+ import androidx.appcompat.app.AppCompatActivity;
162
+
163
+ import android.media.MediaPlayer;
164
+ import android.os.Bundle;
165
+ import android.view.View;
166
+ import android.widget.Button;
167
+ import android.widget.TextView;
168
+
169
+ import static android.media.MediaPlayer.create;
170
+
171
+ public class MainActivity extends AppCompatActivity {
172
+
173
+ TextView timerTextView;
174
+ Button playAgainButton;
175
+
176
+ //BGM
177
+ MediaPlayer bgm;
178
+ //効果音
179
+ MediaPlayer se1;
180
+
181
+ CountDownTimer timer;
182
+
183
+ //BGMが流れているか
184
+ boolean bgmPaused =false;
185
+
186
+
187
+
188
+ public void playAgain(View view) {
189
+ bgm = create(getApplicationContext(), R.raw.startshort);
190
+ bgm.start();
191
+
192
+ //シャキーンを効果音に設定
193
+ se1 = create(getApplicationContext(), R.raw.shakin1);
194
+
195
+
196
+ timer = new CountDownTimer(10000,1000) {
197
+
198
+
199
+ @Override
200
+ public void onTick(long millisUntilFinished) {
201
+ timerTextView.setText(String.valueOf(millisUntilFinished / 1000) + "s");
202
+
203
+ }
204
+
205
+ @Override
206
+ public void onFinish() {
207
+ timerTextView.setText("Finish!");
208
+ se1.start();
209
+ bgm.stop();
210
+ }
211
+ };
212
+
213
+ timer.start();
214
+
215
+
216
+ }
217
+
218
+ //ここから追加したコード
219
+ //アプリ中断時、BGMとカウントダウンを止める
220
+ @Override
221
+ public void onPause() {
222
+ super.onPause();
223
+ bgm.stop();
224
+ bgmPaused = true;
225
+ bgm.release();
226
+
227
+ timer.pause();
228
+
229
+ }
230
+
231
+ @Override
232
+ public void onResume() {
233
+ super.onResume();
234
+
235
+ //BGMが停止していたら
236
+ if(bgmPaused) {
237
+ bgm.start();
238
+ bgmPaused = false;
239
+ timer.resume();
240
+
241
+ }
242
+ }
243
+ //ここまで
244
+
245
+ @Override
246
+ protected void onCreate(Bundle savedInstanceState) {
247
+ super.onCreate(savedInstanceState);
248
+ setContentView(R.layout.activity_main);
249
+
250
+ timerTextView = findViewById(R.id.timerTextView);
251
+ playAgainButton = findViewById(R.id.playAgainButton);
252
+
253
+
254
+ }
255
+ }
256
+
257
+
258
+
95
259
  ```

3

書式の改善

2020/03/19 03:29

投稿

Ksuke_Android
Ksuke_Android

スコア7

title CHANGED
File without changes
body CHANGED
@@ -10,6 +10,7 @@
10
10
  ソースコードすべてのせると長いので、該当部分をのせます↓
11
11
 
12
12
 
13
+ ```Java
13
14
 
14
15
  public class MainActivity extends AppCompatActivity {
15
16
 
@@ -89,4 +90,6 @@
89
90
 
90
91
  }.start();
91
92
 
92
- }
93
+ }
94
+
95
+ ```

2

書式の改善

2020/03/16 08:40

投稿

Ksuke_Android
Ksuke_Android

スコア7

title CHANGED
File without changes
body CHANGED
@@ -62,8 +62,7 @@
62
62
 
63
63
 
64
64
 
65
-
66
- **  //カウントダウンタイマーをスタートさせる
65
+     //カウントダウンタイマーをスタートさせる
67
66
  new CountDownTimer(remainingTime * 1000, countDownInterval) {
68
67
 
69
68
  //CountDownTimerクラスのメソッドを上書き
@@ -90,4 +89,4 @@
90
89
 
91
90
  }.start();
92
91
 
93
- }**
92
+ }

1

コードの該当箇所を太字に

2020/03/16 07:12

投稿

Ksuke_Android
Ksuke_Android

スコア7

title CHANGED
File without changes
body CHANGED
@@ -63,7 +63,7 @@
63
63
 
64
64
 
65
65
 
66
-   //カウントダウンタイマーをスタートさせる
66
+ **  //カウントダウンタイマーをスタートさせる
67
67
  new CountDownTimer(remainingTime * 1000, countDownInterval) {
68
68
 
69
69
  //CountDownTimerクラスのメソッドを上書き
@@ -90,4 +90,4 @@
90
90
 
91
91
  }.start();
92
92
 
93
- }
93
+ }**