2012-05-08 185 views
0

我做了一个两个音频播放使用触摸与两个不同的文本视图播放的一个项目。 这里是一个TextView的播放 - >停止 - >播放 - >停止音频触摸

tv.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     if(event.getAction() == MotionEvent.ACTION_DOWN) 
     { 
      if(v == findViewById(R.id.CustomFontText)) 
      { 


       if (mp != null && mp.isPlaying()) { 
        mp.stop(); 
       } 
       else 
       { 
        mp.start(); 
       } 


       if (mp1 != null && mp1.isPlaying()) { 
        mp1.pause(); 
       } 
       mp.start(); 


     } 

    } 
    return false; 
    } 

这里一个简单的代码mpmp1两个媒体播放器。 tv=textview。当tv触摸mp发挥。当tv再次触摸它停止,,,停止后,如果我再次触摸tv它不会再次播放音频。但我想在这个过程中每一次触摸它...... Play -->Stop-->Play-->Stop....continuous ...我需要在哪里修复它或实施它?

回答

0

先摘掉这个块的代码.....

if (mp1 != null && mp1.isPlaying()) { 
       mp1.pause(); 
      } 
      mp.start(); 

然后开始MP之前每一次,释放前一和的setDataSource到音乐播放对象,准备吧......

Chnage你的代码是这样的...

if (mp != null && mp.isPlaying()) { 
       mp.stop(); 
      } 
      else 
      { 
       mp.release(); // this will bring mp to idle state 
       mp.setDataSource(MEDIA_PATH + File.separator + songs.get(position)); 
       mp.prepare(); 
       mp.start(); 
      } 

我现在认为它西港岛线是肯定的工作...

+0

我从原始文件播放音频,,,我怎样才能设置'mp.setDataSource(MEDIA_PATH + File.separator + songs.get(position))'的路径呢? –

+0

Hei ...你能帮我定义原始文件夹的路径吗?我得到了一个.' mp.setDataSource(appContext,Uri.parse(“android.resource://com.package.name/raw/song”) );'但appContext显示错误:( –

+0

我不知道...我认为它只播放.mp3文件,setData从你的存储卡Environment.getExternalStorageDirectory()。getAbsolutePath()这将指向你的存储卡根..从那里你选择你的目录或文件 – Pradeep

0

请查看MediaPlayerState Diagram

请注意:

一旦处于停止状态,播放不能启动,直到prepare()prepareAsync()被称为重新设置MediaPlayer对象到准备状态。

也似乎在你的代码,你叫mp.start()两次的错误,并mp1.start()不会被调用。

+0

明白了... :(。 ..如果它停止,它将永远不会再次发挥....你有没有其他的方式来做到这一点,而不是停止? –

+0

如果您的意图是每次停止后从头开始。 'stop()'是唯一的方法。但是,您可以在'stop()'后立即调用'prepare()',以便媒体在下次触摸时准备好播放。 – Rajesh