Как я могу реализовать возобновление/приостановку записи звука в Android?

Я создаю приложение для Android, которое делает запись m4a с функцией возобновления/паузы. Возможно ли это? Если да, то дайте мне знать решения.

благодаря

1 ответ

Если вам нужно воспроизводить аудио/видео ресурсы, вы можете использовать объект MediaPlayer, вы можете обернуть его, если у вас есть особые потребности. В частности, для отображения видео вам потребуется SurfaceView и его держатель. Во всяком случае, он работает примерно так:

Предположим, что ваши медиа-ресурсы находятся в исходной папке, медиаплеер может быть примерно таким:

import android.content.Context;
import android.media.MediaPlayer;

public class MyPlayer {

 private MediaPlayer mPlayer;
 private SurfaceHolder mSurfaceHolder;

 public void play(Context c) {

 if (mPlayer == null) {

 mPlayer = MediaPlayer.create(c, R.<your resource="" name="">);
 mPlayer.setDisplay(mSurfaceHolder);

 //Sets a listener to the mPlayer variable that set it to null once the playing is finished
 mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

 @Override
 public void onCompletion(MediaPlayer mp) {
 stop();
 }
 });

 }
 mPlayer.start();
 }

 public void pause() {
 if (mPlayer.isPlaying()) {
 mPlayer.pause();
 }
 }

 public void stop() {
 if (mPlayer != null) {
 mPlayer.release();
 mPlayer = null;
 }
 }

 public void setSurface(SurfaceHolder sh) {
 mSurfaceHolder = sh;
 }

}
</your>

Игрок будет инкапсулирован внутри фрагмента/активности. Предположим, что xml-макет с SurfaceView в качестве "экрана" и трех кнопок для управления мультимедиа, ваш фрагмент будет выглядеть так:

public class PlayerFragment extends Fragment {

 private Button mPlayButton;
 private Button mPauseButton;
 private Button mStopButton;
 private SurfaceView mSurface;
 private SurfaceHolder mHolder;
 private MyPlayer mPlayer = new MyPlayer();

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {

 //Gets the view and sets the player to be able to play a video resource
 View v = inflater.inflate(R.layout.<your xml="" layout="">, parent, false);
 mSurface = (SurfaceView) v.findViewById(R.id.surface);
 mHolder = mSurface.getHolder();
 mHolder.setKeepScreenOn(true);
 mPlayer.setSurface(mHolder);

 //Inflates the play button and sets on it a listener (created as an anonymous class)
 mPlayButton = (Button) v.findViewById(R.id.playButton);
 mPlayButton.setOnClickListener(new View.OnClickListener() {

 @Override
 public void onClick(View v) {
 mPlayer.play(getActivity()); 
 }
 });

 //Inflates the pause button and sets on it a listener (created as an anonymous class)
 mPauseButton = (Button) v.findViewById(R.id.pauseButton);
 mPauseButton.setOnClickListener(new View.OnClickListener() {

 @Override
 public void onClick(View v) {
 mPlayer.pause(); 
 }
 });

 //Inflates the stop button and sets on it a listener (created as an anonymous class)
 mStopButton = (Button) v.findViewById(R.id.stopButton);
 mStopButton.setOnClickListener(new View.OnClickListener() {

 @Override
 public void onClick(View v) {
 mPlayer.stop(); 
 }
 });

 return v;
 }

 @Override
 public void onDestroy() {
 super.onDestroy();
 mPlayer.stop();
 }




}
</your>

Всегда будьте осторожны и освободите медиа-ресурсы, как только вы закончите с ними, или когда действие/фрагмент будет уничтожен с момента получения блокировки. Если вы этого не сделаете, вы можете поставить под угрозу другие приложения или поведение ОС.

Очевидно, что если вам нужны более сложные функции, вам придется их добавлять. Это всего лишь пример действительно простого игрока. Имейте в виду, что возможные несовместимости могут расти с помощью каких-либо файлов и/или устройств.

licensed under cc by-sa 3.0 with attribution.