質問編集履歴

4

追記

2020/03/19 03:29

投稿

Ksuke_Android
Ksuke_Android

スコア7

test CHANGED
File without changes
test CHANGED
@@ -187,3 +187,331 @@
187
187
 
188
188
 
189
189
  ```
190
+
191
+
192
+
193
+
194
+
195
+ ### 追記
196
+
197
+
198
+
199
+ コードが長いので、機能を絞ったアプリを新たに作り、
200
+
201
+ コメントで教えていただいたCountDownTimerを拡張したクラスを新しいファイルにコピペしてつかってみました。
202
+
203
+
204
+
205
+ ![イメージ説明](8f529ff8f60ad54466256df7ab73e633.jpeg)
206
+
207
+
208
+
209
+ MainActivity.Javaに
210
+
211
+
212
+
213
+ ```Java
214
+
215
+ //BGM
216
+
217
+ MediaPlayer bgm;
218
+
219
+ //効果音
220
+
221
+ MediaPlayer se1;
222
+
223
+
224
+
225
+ CountDownTimer timer;
226
+
227
+
228
+
229
+ //BGMが流れているか
230
+
231
+ boolean bgmPaused =false;
232
+
233
+
234
+
235
+
236
+
237
+      //アプリ中断時、BGMとカウントダウンを止める
238
+
239
+      @Override
240
+
241
+ public void onPause() {
242
+
243
+ super.onPause();
244
+
245
+ bgm.stop();
246
+
247
+ bgmPaused = true;
248
+
249
+ bgm.release();
250
+
251
+
252
+
253
+ timer.pause();
254
+
255
+
256
+
257
+ }
258
+
259
+      
260
+
261
+
262
+
263
+      @Override
264
+
265
+  public void onResume() {
266
+
267
+ super.onResume();
268
+
269
+
270
+
271
+ if(bgmPaused) {
272
+
273
+ bgm.start();
274
+
275
+ bgmPaused = false;
276
+
277
+ timer.resume();
278
+
279
+ }
280
+
281
+ }
282
+
283
+
284
+
285
+
286
+
287
+ ```
288
+
289
+
290
+
291
+
292
+
293
+ アプリ中断時onPauseメソッドだけであれば、BGM、カウントダウンの停止ができるようになったのですが、
294
+
295
+ アプリを再び開いたときにBGM、カウントダウンを再開させようとonResumeメソッドを書いたところ、
296
+
297
+ アプリを再び開くとアプリが「繰り返し停止しています」と表示されるようになってしまいました。
298
+
299
+
300
+
301
+ (bgmをpauseしたところから再生再開するメソッドがなさそうだったのでbgm.pauseではなくbgm.stopを使っています)
302
+
303
+
304
+
305
+ どのように書いたらアプリ再開時にうまく動作するでしょうか?
306
+
307
+
308
+
309
+
310
+
311
+ ↓MainActivity全体
312
+
313
+
314
+
315
+ ```Java
316
+
317
+ package com.example.countdowntimer1;
318
+
319
+
320
+
321
+ import androidx.appcompat.app.AppCompatActivity;
322
+
323
+
324
+
325
+ import android.media.MediaPlayer;
326
+
327
+ import android.os.Bundle;
328
+
329
+ import android.view.View;
330
+
331
+ import android.widget.Button;
332
+
333
+ import android.widget.TextView;
334
+
335
+
336
+
337
+ import static android.media.MediaPlayer.create;
338
+
339
+
340
+
341
+ public class MainActivity extends AppCompatActivity {
342
+
343
+
344
+
345
+ TextView timerTextView;
346
+
347
+ Button playAgainButton;
348
+
349
+
350
+
351
+ //BGM
352
+
353
+ MediaPlayer bgm;
354
+
355
+ //効果音
356
+
357
+ MediaPlayer se1;
358
+
359
+
360
+
361
+ CountDownTimer timer;
362
+
363
+
364
+
365
+ //BGMが流れているか
366
+
367
+ boolean bgmPaused =false;
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+ public void playAgain(View view) {
376
+
377
+ bgm = create(getApplicationContext(), R.raw.startshort);
378
+
379
+ bgm.start();
380
+
381
+
382
+
383
+ //シャキーンを効果音に設定
384
+
385
+ se1 = create(getApplicationContext(), R.raw.shakin1);
386
+
387
+
388
+
389
+
390
+
391
+ timer = new CountDownTimer(10000,1000) {
392
+
393
+
394
+
395
+
396
+
397
+ @Override
398
+
399
+ public void onTick(long millisUntilFinished) {
400
+
401
+ timerTextView.setText(String.valueOf(millisUntilFinished / 1000) + "s");
402
+
403
+
404
+
405
+ }
406
+
407
+
408
+
409
+ @Override
410
+
411
+ public void onFinish() {
412
+
413
+ timerTextView.setText("Finish!");
414
+
415
+ se1.start();
416
+
417
+ bgm.stop();
418
+
419
+ }
420
+
421
+ };
422
+
423
+
424
+
425
+ timer.start();
426
+
427
+
428
+
429
+
430
+
431
+ }
432
+
433
+
434
+
435
+ //ここから追加したコード
436
+
437
+ //アプリ中断時、BGMとカウントダウンを止める
438
+
439
+ @Override
440
+
441
+ public void onPause() {
442
+
443
+ super.onPause();
444
+
445
+ bgm.stop();
446
+
447
+ bgmPaused = true;
448
+
449
+ bgm.release();
450
+
451
+
452
+
453
+ timer.pause();
454
+
455
+
456
+
457
+ }
458
+
459
+
460
+
461
+ @Override
462
+
463
+ public void onResume() {
464
+
465
+ super.onResume();
466
+
467
+
468
+
469
+ //BGMが停止していたら
470
+
471
+ if(bgmPaused) {
472
+
473
+ bgm.start();
474
+
475
+ bgmPaused = false;
476
+
477
+ timer.resume();
478
+
479
+
480
+
481
+ }
482
+
483
+ }
484
+
485
+ //ここまで
486
+
487
+
488
+
489
+ @Override
490
+
491
+ protected void onCreate(Bundle savedInstanceState) {
492
+
493
+ super.onCreate(savedInstanceState);
494
+
495
+ setContentView(R.layout.activity_main);
496
+
497
+
498
+
499
+ timerTextView = findViewById(R.id.timerTextView);
500
+
501
+ playAgainButton = findViewById(R.id.playAgainButton);
502
+
503
+
504
+
505
+
506
+
507
+ }
508
+
509
+ }
510
+
511
+
512
+
513
+
514
+
515
+
516
+
517
+ ```

3

書式の改善

2020/03/19 03:29

投稿

Ksuke_Android
Ksuke_Android

スコア7

test CHANGED
File without changes
test CHANGED
@@ -21,6 +21,8 @@
21
21
 
22
22
 
23
23
 
24
+
25
+ ```Java
24
26
 
25
27
 
26
28
 
@@ -181,3 +183,7 @@
181
183
 
182
184
 
183
185
  }
186
+
187
+
188
+
189
+ ```

2

書式の改善

2020/03/16 08:40

投稿

Ksuke_Android
Ksuke_Android

スコア7

test CHANGED
File without changes
test CHANGED
@@ -126,9 +126,7 @@
126
126
 
127
127
 
128
128
 
129
-
130
-
131
- **  //カウントダウンタイマーをスタートさせる
129
+     //カウントダウンタイマーをスタートさせる
132
130
 
133
131
  new CountDownTimer(remainingTime * 1000, countDownInterval) {
134
132
 
@@ -182,4 +180,4 @@
182
180
 
183
181
 
184
182
 
185
- }**
183
+ }

1

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

2020/03/16 07:12

投稿

Ksuke_Android
Ksuke_Android

スコア7

test CHANGED
File without changes
test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
 
130
130
 
131
-   //カウントダウンタイマーをスタートさせる
131
+ **  //カウントダウンタイマーをスタートさせる
132
132
 
133
133
  new CountDownTimer(remainingTime * 1000, countDownInterval) {
134
134
 
@@ -182,4 +182,4 @@
182
182
 
183
183
 
184
184
 
185
- }
185
+ }**