Chorometerで一時停止後リスタートの実装がわからないんです。
ソースコード上ではあってるはずなのに現状ではどうしても画面が呼び出されたときにChorometerが開始される、0:05時に一時停止ボタンを押す→5秒後に0:05にはならず0:10になってしまいます。
どうしてそうなるかをお願いします。
package com.exploreralpha;
import java.io.IOException;
import java.text.BreakIterator;
import android.media.MediaPlayer.OnCompletionListener;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.SystemClock;
import android.provider.MediaStore;
import android.provider.MediaStore.Audio.AudioColumns;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;
//音楽再生,音楽停止,巻き戻し,繰り返し再生,一時停止,自前コントローラの機能を保有するクラス
public class MusicPlayer extends Activity implements OnClickListener, OnCompletionListener {
TextView textView;
TextView musicEndTime;
MediaPlayer music;
Button playButton;//音楽再生/一時停止ボタン
Button rewindButton;//巻き戻しボタン
Button repetMusicButton;//繰り返し再生ボタン
Chronometer chorotemer;
Long startTime;//開始時間
Long stopTime;//停止時間
int duration;//ファイルの長さ(時間)を取得する変数
int currnetPosion;//現在の再生位置を取得する変数
TextView title;//曲名
TextView artst;//アーティスト名
TextView album;//アルバム名
AlertDialog.Builder dialog;
SeekBar seekBar;
boolean startFlag;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.music);
music =new MediaPlayer();
musicPlay();
//それぞれのリソースIDを取得
playButton=(Button)findViewById(R.id.musicPuse_id);
rewindButton=(Button)findViewById(R.id.rewind_id);
repetMusicButton=(Button)findViewById(R.id.repetMusic_id);
musicEndTime =(TextView)findViewById(R.id.musicEndtime);
chorotemer=(Chronometer)findViewById(R.id.startTimer_id);
artst =(TextView)findViewById(R.id.artstText_id);
//それぞれのボタンが押された時の処理をセットするためsetOnClickListenerインタフェースを
//それぞれのボタンにセットしてMusicPlayer本体に実装する
playButton.setOnClickListener(this);
rewindButton.setOnClickListener(this);
repetMusicButton.setOnClickListener(this);
music.setOnCompletionListener(this);
chorotemer=(Chronometer)findViewById(R.id.startTimer_id);
//最初に画面が生成した時に再生ボタンの画像を割り当てる
playButton.setBackgroundResource(R.drawable.pause);
initMediaDate();
duration =music.getDuration();
String timeStr=TimeText(duration);
musicEndTime.setText(timeStr);
// 初期値の設定 設定しないと端末が起動してからの時間からスタート
if(music.isPlaying()){
startTime=SystemClock.elapsedRealtime();
chorotemer.setBase(startTime);
chorotemer.start();
}
}
/**
*@param v
* 音楽再生ボタン,音楽停止ボタン,音楽一時停止ボタン,巻き戻しボタンが繰り返し再生ボタンが押された時の処理
*/
public void onClick(View v) {
if(v==playButton){//一時停止ボタンが押された時の処理
stopTime=SystemClock.elapsedRealtime();
if(music.isPlaying()){//音楽が再生されている時
playButton.setBackgroundResource(R.drawable.musicplay);
//Toast.makeText(this, "一時停止されました。", Toast.LENGTH_LONG).show();
music.pause();//一時停止する
chorotemer.stop();
}else{//音楽が再生されていない時
playButton.setBackgroundResource(R.drawable.musicpause);
//Toast.makeText(this, "再生されました。", Toast.LENGTH_LONG).show();
Long time_1=stopTime-startTime;
chorotemer.setBase(SystemClock.elapsedRealtime()-time_1);
chorotemer.start();
music.start();
}
}
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
stopTime=SystemClock.elapsedRealtime(); //一時停止ボタンが押された時間
この文が、
if(music.isPlaying()){//音楽が再生されている時
このif文の前に実装されているため、再開の一時停止ボタンクリック時にもstopTimeが更新されます。これは意図した動作ではないと思われます。
直し方の一案ですが、一時停止時間の記録は再生中のみなので、music.isPlaying() == trueの時のみ取ればよいかと思われます。「音楽が再生されている時」のブロックの中に入れるとどうなるでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Android(アンドロイド) AQUOS sense6sの物理ボタン(アシスタントキー)に再生・一時停止を割り当てる方法 2 2022/08/09 00:37
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- YouTube YouTubePREMIUMについての質問です。Androidです。 動画を一時停止したままアプリを 1 2022/04/09 17:46
- その他(プログラミング・Web制作) AndroidStudio エラー と インストール の件 1 2023/06/27 12:28
- その他(パソコン・周辺機器) AndroidにPCを介してCDを取り込んだら なぜか日本語の曲名だけがすべて文字化けしていました。 1 2022/03/31 20:31
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シャットダウンフックが呼ばれない
-
ActionForm form にnullが入っ...
-
eclipseに記述したjavaファイル...
-
setAttribute(String, int)は適...
-
Selenium IDEでexportしたコー...
-
かなり初歩的なプログラミング...
-
ファイル名を動的に生成したい
-
アプレットを実行すると、×が表...
-
なんかエラーがでた
-
文字列を数式に
-
アルファベットのソート
-
透過GIFの判定の仕方ありますか?
-
HTMLでのTableタグデータ取得方法
-
VBAで配列の計算
-
配列にnullを代入すると、null...
-
ループ処理の際、最後だけ","を...
-
配列をセッションに割り当てた後で
-
1~100までの数字を表示し、か...
-
Log4jで機能毎に別ファイルへ出...
-
Junitテストでvoid戻り値メッソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
干支の計算で。。。
-
Selenium IDEでexportしたコー...
-
Javaを使ってデジタル時計を作...
-
ColabでのPytorchのエラー
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
ファイル名を動的に生成したい
-
文字列を数式に
-
<forEach> 内で供給された "ite...
-
シャットダウンフックが呼ばれない
-
Javaからストアド実行(配列項目)
-
ActionForm form にnullが入っ...
-
setAttribute(String, int)は適...
-
(急募)JavaカレンダーをGUI可に...
-
文字サイズが可変のラベル
-
Java での グローバルIP取得
-
python OpenPyXLを使って出力結...
-
データの外挿について
おすすめ情報