• 締切済み

Chorometerで一時停止した後再開の実装

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(); } }

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

stopTime=SystemClock.elapsedRealtime(); //一時停止ボタンが押された時間 この文が、 if(music.isPlaying()){//音楽が再生されている時 このif文の前に実装されているため、再開の一時停止ボタンクリック時にもstopTimeが更新されます。これは意図した動作ではないと思われます。 直し方の一案ですが、一時停止時間の記録は再生中のみなので、music.isPlaying() == trueの時のみ取ればよいかと思われます。「音楽が再生されている時」のブロックの中に入れるとどうなるでしょうか。

関連するQ&A

  • Android JAVAへでの質問です

    (←※この部分!) の意味がわからないのでどなたか教えていただけないでしょうか? private EditText edit1; ですが、なぜ private がついているのでしょうか?なくても動きましたが何か意味があるのでしょうか? そしてどうして、この子はここにいるのでしょうか? Button btn1 と一緒に仲良くいてもいいんじゃないでしょうか? ================ import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.view.*; import android.view.View.OnClickListener; import android.widget.*; public class Test2Activity extends Activity { private EditText edit1;(←※この部分!) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); edit1 = (EditText)this.findViewById(R.id.EditText1); Button btn1 = (Button)this.findViewById(R.id.button1); btn1.setOnClickListener(new MyClickA()); } class MyClickA implements OnClickListener { public void onClick(View view){ Editable e = edit1.getText(); int n = Integer.parseInt(e.toString()); Toast toast = Toast.makeText(getApplicationContext(), "数値=" + n, Toast.LENGTH_SHORT); toast.show(); } } }

    • ベストアンサー
    • Java
  • android.R.id.text1はどこにある

    androidアプリ開発 を読みながら、作業しています。 ( 184ページ ) サンプルのコード SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter( this, g_list, android.R.layout.simple_expandable_list_item_1, new String[] { "group_title"}, new int[]{android.R.id.text1 }, c_list, android.R.layout.simple_expandable_list_item_2, new String[] {"child_title", "child_text" }, new int[] { android.R.id.text1, android.R.id.text2 } ); elv.setAdapter(adapter); elv.setOnChildClickListener( new OnChildClickListener() { public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { TextView txt = (TextView) ((TwoLineListItem) v).findViewById(android.R.id.text1); Toast.makeText(AddrListShowActivity.this, txt.getText(), Toast.LENGTH_LONG).show(); return false; } } は、動くのですが、欲張って SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter( this, g_list, android.R.layout.simple_expandable_list_item_1, new String[] { "group_title"}, new int[]{android.R.id.text1 }, c_list, android.R.layout.simple_expandable_list_item_2, new String[] {"child_title", "child_text" }, new int[] { android.R.id.text2, android.R.id.text3 } ); elv.setAdapter(adapter); elv.setOnChildClickListener( new OnChildClickListener() { public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { TextView txt = (TextView) ((TwoLineListItem) v).findViewById(android.R.id.text1); Toast.makeText(AddrListShowActivity.this, txt.getText(), Toast.LENGTH_LONG).show(); TextView txt2 = (TextView) ((TwoLineListItem) v).findViewById(android.R.id.text2); Toast.makeText(AddrListShowActivity.this, txt2.getText(), Toast.LENGTH_LONG).show(); TextView txt3 = (TextView) ((TwoLineListItem) v).findViewById(android.R.id.text3); Toast.makeText(AddrListShowActivity.this, txt3.getText(), Toast.LENGTH_LONG).show(); return false; } } とすると、android.R.id.text3  が原因で動きません。 そもそも、android.R.id.text1 の  text1 は何処にあるのでしょうか。 アドバイスよろしくお願いします。  

  • Androidプログラミング アプリが停止する

    eclipseでボタンを押すと画像が表示されるアプリをつくろうとしていましたがボタンをを押すとポップアップで「~を停止します。」と表示されアプリが落ちてしまいます。 Ver4.0を使用しています。 package my.application.imageviewer; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; public class ImageViewer extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void showImage(View view) { ImageView imageView1 = (ImageView)findViewById(R.id.imageView1); imageView1.setImageResource(R.drawable.sample); } } プログラムにミスがあるのでしょうか? 宜しくお願い致します。

  • androidでアプリを作ろうとしてるのですが

    package com.example.test; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; public class InOutTest extends Activity { /** Called when the activity is first created. */ public TextView txtInfo; public EditText edtText; public Button outputbutton; public TextView txtResult; public TextView txtjudge; public String strInch; public String gettext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //レイアウト作成 ここから LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); setContentView(layout); //レイアウトを見えるようにする //レイアウト作成 ここまで //GUI部品作成 ここから // ラベル txtInfo = new TextView(this); txtInfo.setText("check"); strInch = ("check"); layout.addView(txtInfo); // エディタ edtText = new EditText(this); layout.addView(edtText); // ボタン txtResult = new Button(this); txtResult.setText("same or difference"); layout.addView(txtResult); // 結果表示用ラベル txtjudge = new TextView(this); txtjudge.setText("check"); layout.addView(txtjudge); //GUI部品作成 ここまで txtResult.setOnClickListener(new OnClickListener(){ public void onClick(View v) { gettext = edtText.toString(); if (strInch==gettext){ txtjudge.setText("ok"); } }; }); }} 上のプログラムで strInchに入ってるデータとgettextで取得した文章を比較して同じなら txtjudgeにOKと引き渡して表示させたいのですがうまく動きません 何方かどうぞよろしくお願い致します

    • ベストアンサー
    • Java
  • R.javaが自動生成されない

    Androidアプリ開発をEclipseでしていますがR.javaが自動生成されず、 ビルド時にエラーが出てしまいます。 コンパイル時に「Rを変数に解決できません」の主旨のエラーが出ています。 他サイトでの対処方法を参考に以下方法を実行しましたが、 R.javaは自動生成されずに半ばあきらめぎみです… 以下試した方法 --------------------------------------------------------- ○Eclipseのプロジェクトスクリーンを実行する ○「プロジェクト」→「自動的にビルド」にチェックが入っている ○layoutフォルダのXMLの文法エラーはない ○Eclipseの再起動 ○プロジェクトのクリーン ○xmlファイル名はactivity_mainであり大文字はつかっていない ○「ウィンドウ」を選択し「設定」→「Java」→「コンパイラー」 でコンパイラー準拠レベルを変更 --------------------------------------------------------- 以下activity_main.xml ---------------------------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TextView android:id="@+id/TextView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:textSize="12pt" /> <Button android:id="@+id/button01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/button01" /> </LinearLayout> ---------------------------------------------------------------------- 以下string.xml ---------------------------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Botan</string> <string name="hello">ボタンを押してね。</string> <string name="button01">クリック</string> </resources> ---------------------------------------------------------------------- 以下MainActivity.java ---------------------------------------------------------------------- package com.example.botan; import android.os.Bundle; import android.app.Activity; import android.view.*; import android.view.View.OnClickListener; import android.widget.*; public class MainActivity extends Activity { private TextView text1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text1 = (TextView)this.findViewById(R.id.TextView); Button btn1 = (Button)this.findViewById(R.id.burron01); btn1.setOnClickListener(new MyClickAdapter()); } class MyClickAdapter implements OnClickListener { public void onClick(View view){ text1.setText("クリックしました!"); } } }----------------------------------------------------------------------------------- どなたか他にチェックする箇所、 もしくは上記で不適切な記述があることが分かるかた ご教示下さい。 よろしくお願い申し上げます。 補足 以下参考サイト(ソース等はコピペしたので同じはずです) ▼Androidプログラミング日記 http://androidn.hannnari.com/link7-botan.html

    • ベストアンサー
    • Java
  • Androidプログラムについて

    多数の画像を、パラパラ漫画のように切り替えていく方法について相談があり、投稿させていただきました。 以前、xmlファイルで画像を読み込む方法が簡単だということで、hirotn様にご回答いただき、 動作させることができました。 ありがとうございました。 携帯の実機にインストールし、エラーも出ず動作することも確認できたのですが、 画像を切り替えるタイミングがあまりにも遅くなっており困っています。 画像が多い場合は、メモリ不足等起こっているのでしょうか。 プログラムで解決できる方法があれば教えていただきたく、よろしくお願いします。 (ちなみに、xmlファイルで読み出すファイルは100枚程度(80MB程度)です。 もっと数を増やしたり、画質をよくしたいとも思っております。) ※サンプルは下記で見つけました。 http://monoist.atmarkit.co.jp/mn/articles/1205/21/news003.html (以下、プログラム) package jp.test.animation.frame; import android.app.Activity; import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class FrameAnimationTestActivity extends Activity { // ボタン Button mBtnAnimation; Button m5BtnAnimFromXML; // ビュー ImageView mImageAnimation; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mBtnAnimation = (Button) findViewById( R.id.button_animation ); m5BtnAnimFromXML = (Button) findViewById( R.id.button_anim_from_xml ); mImageAnimation = (ImageView) findViewById( R.id.image_animation ); mBtnAnimation.setOnClickListener(mClickListener); m5BtnAnimFromXML.setOnClickListener(mClickListener); } View.OnClickListener mClickListener = new View.OnClickListener() { public void onClick(View v) { // アニメーション中なら、停止 Drawable d = mImageAnimation.getBackground(); if( d != null ){ try{ if( ((AnimationDrawable) d).isRunning() ){ ((AnimationDrawable) d).stop(); return; } } catch( RuntimeException e ){ e.printStackTrace(); } } //if( v == mBtnAnimation ){ //frameAnimationTest( //FrameAnimationTestActivity.this, mImageAnimation ); //} if( v == m5BtnAnimFromXML ){ frameAnimationFromXMLTest( mImageAnimation ); } } }; // フレームアニメーションを XML から読み込む void frameAnimationFromXMLTest( View v ){ // リソースからアニメーションを読み込み、ビューに設定 v.setBackgroundResource( R.drawable.droid_jump ); // ビューからアニメーションを取り出し AnimationDrawable anim = (AnimationDrawable)v.getBackground(); // アニメーション開始 anim.start(); } }

  • Androidで画面遷移ができません.

    初心者ながら,Android向けにアプリを開発しています. ページXXXXXでボタンを表示させ,ページYYYYYで画像が表示されるようにしたいのですが,ページXXXXXで表示されたボタンを押すとエラーが出て強制終了となってしまいます. 画面遷移されるページ(YYYYY)には,適当な位置にタッチさせるとタッチした位置に移動する画像についてプログラミングしてあります.ページYYYYYは個別で実行すると正常に起動します. どこに原因があるのか教えてください.よろしくお願いします. ページXXXXXのソースは以下のとおりです. 【ソース】 import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.content.Intent; public class XXXXX extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Intent intent = new Intent(XXXXX.this, YYYYY.class); startActivity(intent); } }); } }

    • ベストアンサー
    • Java
  • Android開発 Eclipse(超初心者)

    Eclipseの使い方がわかりません。 eclipseをインストールしてプロジェクトを作成しAVDの仮想デバイスを適当に作成し AVD仮想デバイス ターゲット:Android4.0-APILevel14 SDカード:サイズ 66MiB スキン:ビルトイン WVGA800 package com.example.android.hello.test; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; public class Hello15 extends Activity{ //表示用のテキストとボタンを宣言 --- private TextView txtCaption; private Button btnHello; public void OnCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); //レイアウトを作成 LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); setContentView(layout); //テキストを追加 txtCaption = new TextView(this); txtCaption.setText("Click Button!"); layout.addView(txtCaption); //ボタンを追加 btnHello = new Button(this); btnHello.setText("Button"); layout.addView(btnHello); //イベントを設定 btnHello.setOnClickListener(new OnClickListener(){ public void onClick(View v){ txtCaption.setText("Hello, Android!"); } }); } } サンプルで上記のようなソースを作成して 実行したのですが 以前は Android Application Java Applet Java Application など選択肢が出てたのですが仮想デバイスを設定した 辺りからでなくなり実行して少し経つと ←画面に『android』という文字が →画面にキーボードのようなものがでてきて 3分ぐらいまつと←画面が携帯画面に変化します 上記のプログラムではボタンの生成とメッセージがでてくるはずが それらしきものがありません。これらはどこに出てくるのでしょうか? 動かし方すらよくわかってないのでお解説おねがいいたしもうす;

  • Javaの質問です(引数の中でメソッド定義?)

    お世話になります。 現在、Javaについて勉強しておりまして一つ不明な点があり投稿させていただきました。 まずはソースをご覧ください。 ---------------------------------------------------------------------------------------------- button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Main.this, Editor.class); TextView textView = (TextView)findViewById(R.id.TextView01); CharSequence text = textView.getText(); intent.putExtra("TEXT", text + "000"); startActivityForResult(intent, SHOW_EDITOR); } }); ---------------------------------------------------------------------------------------------- 上記はサンプルプログラムから一部抜粋したものですが button.setOnClickListenerの引数でnew演算子を使用しており、 尚かつonClickメソッドをオーバーライドして定義しています。 C++開発経験者の私としては非常に見づらいのですが、こんな書き方って結構使うんでしょうか? これがイマイチ理解できていません。 この書き方をネットで探しても見つからなかったため、こちらでご質問させていただきました。 どなたかご教授願います。

  • すいません、Android初心者です

    最近EclipseでAndroidの勉強を始めたものです。 早速ですが、以下のソースを実行すると、何故か「[アプリ名](パッケージ名)が予期せず停止 しました。やり直してください」と出てきます・・・コメントの部分をコメントアウトするとうまく動作 するのですが、何故でしょうか?なお、ターゲットは2.3.3のものを利用しています。 /* +++ Javaソース +++ */ import android.app.Activity; import android.os.Bundle; import android.widget.Button; public class Android_Test01Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button button1 = (Button) findViewById(R.id.button1); //button1.setText("button1"); setContentView(R.layout.main); } } /* +++ XMLソース +++ */ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout>

    • ベストアンサー
    • Java

専門家に質問してみよう