暂停按钮只能在短时间内加扰音频

问题描述:

我对Java相当陌生,并且一直在开发一个应用程序来从互联网传输实时音频。除了暂停按钮外,我已经完成了所有工作。现在它所做的只是在短时间内对音频进行加扰。我猜这跟mediaPlayer.pause()被调用的地方有关,但我可能是错的。感谢您的时间和回应。暂停按钮只能在短时间内加扰音频

package com.example.jacob.wutk; 

import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageButton; 

import java.io.IOException; 

public class radio extends AppCompatActivity { 

    /** Called when the user touches the button */ 

    public void playPauseMusic (View playPause) throws IOException { 
     String url = "http://streamer.cci.utk.edu:8000/wutk-vorbis"; // your URL here 
     final MediaPlayer mediaPlayer = new MediaPlayer(); 

     ImageButton imb = (ImageButton) findViewById(R.id.playPause); 

     if (mediaPlayer.isPlaying()) { 
      imb.setImageResource(R.drawable.play1); 
      mediaPlayer.pause(); 
      return; 
     } else { 
      imb.setImageResource(R.drawable.pause1); 
     } 

     mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      public void onPrepared(MediaPlayer mediaPlayer){ 
       mediaPlayer.start(); 
      } 
     }); 

     mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mediaPlayer.setDataSource(url); 
     mediaPlayer.prepareAsync(); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_radio); 
    } 
} 

尝试使用此代码:

com.example.jacob.wutk; 

     import android.media.AudioManager; 
     import android.media.MediaPlayer; 
     import android.support.v7.app.AppCompatActivity; 
     import android.os.Bundle; 
     import android.view.View; 
     import android.widget.ImageButton; 

     import java.io.IOException; 

public class radio extends AppCompatActivity { 

    private MediaPlayer mediaPlayer; 
    private boolean isMediaPlayerStarted = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_radio); 
     setMediaPlayer(); 
    } 

    public void setMediaPlayer() { 
     try { 
      mediPlayer = new MediaPlayer(); 
      String url = "http://streamer.cci.utk.edu:8000/wutk-vorbis"; 

      ImageButton imb = (ImageButton) findViewById(R.id.playPause); 

      imb.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (!isMediaPlayerStarte) { 
         mediaPlayer.prepareAsync(); 
         isMediaPlayerStarted = true; 
        } else { 
         if (mediaPlayer.isPlaying()) { 
          imb.setImageResource(R.drawable.play1); 
          mediaPlayer.pause(); 
         } else { 
          imb.setImageResource(R.drawable.pause1); 
          mediaPlayer.start(); 
         } 
        } 
       } 
      }); 

      mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       public void onPrepared(MediaPlayer mediaPlayer) { 
        mediaPlayer.start(); 
       } 
      }); 

      mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mediaPlayer.setDataSource(url); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

它的伟大工程。我会接受它,但我确实有两个要求。 1.)您是否可以在MediaPlayer无法启动的地方播放,直到按下playPause? 2.)我是Java新手,你能解释一下你在这里做了什么吗? – McLemore

+0

我编辑我的问题。现在来解释一下: 我创建了一个布尔参数来检查MediaPlayer是否准备好了(准备开始),并且在我们创建这个ImageButton(imb)之后,我们设置了一个onClickListener(https://developer.android.com/ reference/android/view/View.OnClickListener.html),并告诉侦听器,如果我们没有预付MediaPlayer,开始准备它并将布尔参数设置为true(以知道MediaPlayer已准备好)。然后每次点击ImageButton(imb)时,我们都会进入其他功能(检查播放器是暂停启动还是停止播放) –