2 clcurie 11 clcurie_11 于 2012.12.07 14:29 提问

点击按钮后停止媒体播放器

我在程序中设置一个媒体播放器,有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"

2个回答

cytown
cytown   2012.12.07 14:46
已采纳

在Play的时候运行的runnable要先stop然后才能release, 否则mPlayer.getCurrentPosition()会导致crash。

CSDN_Ask
CSDN_Ask   2012.12.07 17:45
Drawable drawable = getResources().getDrawable(R.drawable.shape);
drawable.setBounds(0,0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!