程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> media-點擊按鈕後停止媒體播放器

media-點擊按鈕後停止媒體播放器

編輯:編程綜合問答
點擊按鈕後停止媒體播放器

我在程序中設置一個媒體播放器,有play和stop按鈕,當我運行以下代碼時,play按鈕是沒有問題的,但是當我點擊stop按鈕時,卻得到一個強行關閉的消息。這是怎麼回事呢?
這是我所用使用的代碼:

package com.example.hellomedia;
import java.io.IOException;

    import android.app.Activity;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.View;
    import android.widget.TextView;

    public class HelloMedia extends Activity {

          /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            final MediaPlayer mPlayer = MediaPlayer.create(HelloMedia.this, R.raw.nicholas);

            setContentView(R.layout.main);

            final Handler mHandler = new Handler();

            final TextView customTextBG = (TextView) findViewById(R.id.customTextBG);
            final TextView customTextHL = (TextView) findViewById(R.id.customTextHL);

            customTextBG.setText("Nicholas was… \n\nOlder than sin, ");
            customTextHL.setText("");

            final String words[] = {
                    "Nicholas ", // 0
                    "was... \n\n", // 1
                    "Older ", // 2
                    "than ", // 3
                    "sin, ", // 4
            };

            final long startEndTime[][]={
                    {   //start time
                        1148,// 0,0
                        1826, // 0,1
                        2766,// 0,2
                        3079,// 0,3
                        3549,// 0,4

                    },
                    {   //end time
                        1357,// 1,0
                        2192, // 1,1
                        3027,// 1,2
                        3183,// 1,3
                        3966,// 1,4
                    }
                };


            customTextBG.setText("Nicholas was… \n\nOlder than sin, ");
            customTextHL.setText("");


            View.OnClickListener handler = new View.OnClickListener(){
                public void onClick(View v) {

                    switch (v.getId()) {
                        case R.id.widget30: // PLAY

                            if( !mPlayer.isPlaying() ){

                                try {
                                    mPlayer.prepare();
                                } catch (IllegalStateException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                } catch (IOException e) {
                                    // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }

                                mPlayer.start();

                                mHandler.post(new Runnable(){

                                        public void run(){ 
                                        final long currentPos = mPlayer.getCurrentPosition();

                                            int x = 0;
                                            while( x < 102){
                                                if( currentPos > startEndTime[0][x] && currentPos < startEndTime[1][x] ){//0
                                                customTextHL.append(words[x]);
                                                words[x]="";
                                            }
                                            x++;
                                        } mHandler.postDelayed(this, 1);
                                        }

                                  });
                            }

                            break;

                        case R.id.widget31: // RESET

                            mHandler.post(new Runnable(){

                                public void run(){ 
                                    customTextBG.setText("Nicholas was… \n\nOlder than sin, ");
                                    customTextHL.setText("");
                                }

                          });

                            mPlayer.stop();
                            mPlayer.release();

                            break;
                    }
                }
            };

            // BUTTONS
            findViewById(R.id.widget30).setOnClickListener(handler); // PLAY
            findViewById(R.id.widget31).setOnClickListener(handler); // RESET

        }
    }

main.xml:

android:id="@+id/customTextBG" 
android:textSize="18sp" 
android:text="@+id/customTextBG" 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/widget31"
android:layout_alignParentLeft="true"
>
</TextView>
<TextView
android:textStyle="bold" 
android:id="@+id/customTextHL" 
android:textSize="18sp" 
android:text="@+id/customTextHL" 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/widget31"
android:layout_alignParentLeft="true"
android:textColor="#00FF00"
>
</TextView>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/widget30"
android:text="@string/reset" android:id="@+id/widget31">
</Button>
<Button
android:id="@+id/widget30"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"

最佳回答:


在Play的時候運行的runnable要先stop然後才能release, 否則mPlayer.getCurrentPosition()會導致crash。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved