本帖最后由 zhangle123 于 2012-08-03 12:06:08 编辑

解决方案 »

  1.   

    能描述的再详细点么?我的理解是你可以在onstartcommend中用if进行判断,if(mediaplayer==null){
       creatMedia();
    }
    else{
    ...
    }
      

  2.   

    就是在onstartcommend里面创建的时候就重复创建了,比如之前是打开MP3,现在你说暂停就不行了,因为不是同一个了,在自己的 private void play(MediaPlayer mediaPlayer, File f) ;里面创建的话呢,在private void pause(MediaPlayer mediaPlayer) 里面显示是null!不过 我先去试一下你的建议啊
      

  3.   

    你个建议和给你啊,经过你的建议和修改,已经ok了,看到你在csdn里面说你吧在线播放的问题解决了,我也遇到了这个问题,就是都inputstream的时候就是读不完,public InputStream getInputStreamFromUrl(String urlStr)
    throws MalformedURLException, IOException {
    url = new URL(urlStr);
    URLConnection urlConn = url.openConnection();
    urlConn.setReadTimeout(500000); //加大超时的时间
    urlConn.setDoInput(true);
    InputStream inputStream = urlConn.getInputStream();
    System.out.println("inputStream : " + inputStream.available());
    return inputStream;
    }这里我是想下载一个MP3那么久先要把文件转换为流,可是怎么读读书不全,而且eclipse和myclispe读的大小还不一样,是什么问题啊,我的意思也就是说得到的inputStream只有200多个字节儿一个MP3有3-5Mb,希望你还可以救我一把啊
      

  4.   

    这里只是自己写的,可能比较粗糙,参考吧/**
     * MP3播放Service
     * @author NOHI
     * 2012-8-1
     */
    public class Mp3PlayerService extends Service{
    private Mp3Info mp3Info; //当前传入的mp3
    private Mp3Info lastMp3Info;//上次mp3
    MediaPlayer mediaPlayer;
    private String mp3State;//mp3当前状态    nothing  Play  Pause Stop

    @Override
    public IBinder onBind(Intent intent) {
    Log.d("Mp3PlayerService","当前MP3状态:" + mp3State);
    return null;
    } @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    String intentType = intent.getStringExtra(Mp3PlayerMeteData.INTENT_TYPE);
    mp3Info = (Mp3Info)intent.getSerializableExtra(Mp3PlayerMeteData.INTENT_TYPE_MP3INFO);
    if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(intentType)) {
    playMp3();
    }else if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(intentType)) {
    pauseMp3();
    }else if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_STOP.equals(intentType)) {
    stopMp3();
    }
    return 0;
    }

    /**
     * 播放mp3
     * author:NOHI
     * date: 2012-8-1
     */
    private void playMp3(){
    Log.d("Mp3PlayerService", "lastMp3Info: " + lastMp3Info + " \n mediaPlayer: " + mediaPlayer + " ,\n mp3State: " + mp3State);
    if (    null == lastMp3Info 
         || !mp3Info.getMp3Name().equals(lastMp3Info.getMp3Name())
         || null == mediaPlayer
         || !Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(mp3State) //不在播放状态
    ) {
    if (!Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(mp3State)) {
    //注意这里的path:file:/  只能有一个 "/" 如果有"//"则报错
    String path = "file:" + FileUtil.getExternalStorageDir(mp3Info.getMp3Name());
    Log.d("Mp3PlayerService", path);
    mediaPlayer = MediaPlayer.create(this, Uri.parse(path));

    //当播放完时,设置状态
    mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
    mp3State = null;

                    Intent intent = new Intent();
                    intent.setAction(Mp3PlayerMeteData.INTENT_TYPE_MP3_PLAY_END);
                    intent.putExtra(Mp3PlayerMeteData.INTENT_TYPE, Mp3PlayerMeteData.MP3PLAYER_OPERATION_END);
                    Mp3PlayerService.this.sendBroadcast(intent);
    }
    });

    Log.d("Mp3PlayerService", "mediaPlayer: " + mediaPlayer);
    mediaPlayer.setLooping(false);
    try {
    mediaPlayer.prepare();
    } catch (IllegalStateException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
                    
    }else if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(mp3State)) {//如果为暂停,则恢复运行
    }
    mediaPlayer.start();
    lastMp3Info = mp3Info;
    mp3State = Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY;
    }
    }

    /**
     * 暂停mp3
     * author:NOHI
     * date: 2012-8-1
     */
    private void pauseMp3(){
    if (    null != lastMp3Info && null != mediaPlayer && mediaPlayer.isPlaying()
     && mp3Info.getMp3Name().equals(lastMp3Info.getMp3Name())
     && Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(mp3State)
    ) {
    mediaPlayer.pause();
    mp3State = Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE;
    }
    } /**
     * 停止
     * author:NOHI
     * date: 2012-8-1
     */
    private void stopMp3(){
    if (    null != lastMp3Info && null != mediaPlayer 
     && (    Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(mp3State)
      || Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(mp3State)  
        )
     && mp3Info.getMp3Name().equals(lastMp3Info.getMp3Name())
    ) {
    mediaPlayer.stop();
    mediaPlayer.release();
    mp3State = Mp3PlayerMeteData.MP3PLAYER_OPERATION_STOP;
    }
    }
    }