Учебники

Android — MediaPlayer

Android предоставляет множество способов управления воспроизведением аудио / видео файлов и потоков. Одним из таких способов является использование класса MediaPlayer .

Android предоставляет класс MediaPlayer для доступа к встроенным сервисам медиаплеера, таким как воспроизведение аудио, видео и т. Д. Чтобы использовать MediaPlayer, мы должны вызвать статический метод create () этого класса. Этот метод возвращает экземпляр класса MediaPlayer. Его синтаксис выглядит следующим образом —

MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.song);

Второй параметр — это название песни, которую вы хотите воспроизвести. Вы должны создать новую папку в вашем проекте с именем raw и поместить в нее музыкальный файл.

Создав объект Mediaplayer, вы можете вызвать несколько методов для запуска или остановки музыки. Эти методы перечислены ниже.

mediaPlayer.start();
mediaPlayer.pause();

При вызове метода start () музыка начнет воспроизводиться с самого начала. Если этот метод вызывается снова после метода pause () , музыка начинает воспроизводиться с того места, где она была оставлена, а не с начала.

Чтобы начать музыку с самого начала, вы должны вызвать метод reset () . Его синтаксис приведен ниже.

mediaPlayer.reset();

Помимо метода start и pause, этот класс предоставляет и другие методы для лучшей работы с аудио / видео файлами. Эти методы перечислены ниже —

Sr.No Метод и описание
1

играет()

Этот метод просто возвращает истину / ложь, указывая, что песня играет или нет

2

seekTo (положение)

Этот метод принимает целое число и перемещает песню в эту конкретную позицию на миллисекунду

3

getCurrentPosition ()

Этот метод возвращает текущую позицию песни в миллисекундах

4

getDuration ()

Этот метод возвращает общую продолжительность песни в миллисекундах

5

сброс()

Этот метод сбрасывает медиаплеер

6

релиз()

Этот метод освобождает любой ресурс, связанный с объектом MediaPlayer

7

setVolume (float leftVolume, float rightVolume)

Этот метод устанавливает громкость вниз для этого игрока

8

setDataSource (FileDescriptor fd)

Этот метод устанавливает источник данных аудио / видео файла

9

selectTrack (int index)

Этот метод принимает целое число и выбирает дорожку из списка по этому конкретному индексу

10

getTrackInfo ()

Этот метод возвращает массив информации о дорожке

играет()

Этот метод просто возвращает истину / ложь, указывая, что песня играет или нет

seekTo (положение)

Этот метод принимает целое число и перемещает песню в эту конкретную позицию на миллисекунду

getCurrentPosition ()

Этот метод возвращает текущую позицию песни в миллисекундах

getDuration ()

Этот метод возвращает общую продолжительность песни в миллисекундах

сброс()

Этот метод сбрасывает медиаплеер

релиз()

Этот метод освобождает любой ресурс, связанный с объектом MediaPlayer

setVolume (float leftVolume, float rightVolume)

Этот метод устанавливает громкость вниз для этого игрока

setDataSource (FileDescriptor fd)

Этот метод устанавливает источник данных аудио / видео файла

selectTrack (int index)

Этот метод принимает целое число и выбирает дорожку из списка по этому конкретному индексу

getTrackInfo ()

Этот метод возвращает массив информации о дорожке

пример

Вот пример, демонстрирующий использование класса MediaPlayer. Он создает базовый медиаплеер, который позволяет перематывать, перематывать, воспроизводить и приостанавливать песню.

Чтобы поэкспериментировать с этим примером, вам нужно запустить его на реальном устройстве, чтобы услышать звук.

меры Описание
1 Вы будете использовать Android Studio IDE для создания приложения Android в пакете com.example.sairamkrishna.myapplication.
2 Измените файл src / MainActivity.java, чтобы добавить код MediaPlayer.
3 Измените res / layout / activity_main, чтобы добавить соответствующие компоненты XML
4 Создайте новую папку в MediaPlayer с именем как raw и поместите в нее музыкальный mp3-файл с именем song.mp3
5 Запустите приложение и выберите работающее устройство Android, установите на него приложение и проверьте результаты.

Ниже приводится содержимое измененного основного файла активности src / MainActivity.java .

package com.example.sairamkrishna.myapplication;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;

import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import java.util.concurrent.TimeUnit;


public class MainActivity extends Activity {
   private Button b1,b2,b3,b4;
   private ImageView iv;
   private MediaPlayer mediaPlayer;
	
   private double startTime = 0;
   private double finalTime = 0;
	
   private Handler myHandler = new Handler();;
   private int forwardTime = 5000;
   private int backwardTime = 5000;
   private SeekBar seekbar;
   private TextView tx1,tx2,tx3;

   public static int oneTimeOnly = 0;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      b1 = (Button) findViewById(R.id.button);
      b2 = (Button) findViewById(R.id.button2);
      b3 = (Button)findViewById(R.id.button3);
      b4 = (Button)findViewById(R.id.button4);
      iv = (ImageView)findViewById(R.id.imageView);

      tx1 = (TextView)findViewById(R.id.textView2);
      tx2 = (TextView)findViewById(R.id.textView3);
      tx3 = (TextView)findViewById(R.id.textView4);
      tx3.setText("Song.mp3");

      mediaPlayer = MediaPlayer.create(this, R.raw.song);
      seekbar = (SeekBar)findViewById(R.id.seekBar);
      seekbar.setClickable(false);
      b2.setEnabled(false);

      b3.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "Playing 
               sound",Toast.LENGTH_SHORT).show();
            mediaPlayer.start();

            finalTime = mediaPlayer.getDuration();
            startTime = mediaPlayer.getCurrentPosition();

            if (oneTimeOnly == 0) {
               seekbar.setMax((int) finalTime);
               oneTimeOnly = 1;
            }
				
            tx2.setText(String.format("%d min, %d sec",
               TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
               TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
               TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) 
                  finalTime)))
            );

            tx1.setText(String.format("%d min, %d sec",
               TimeUnit.MILLISECONDS.toMinutes((long) startTime),
               TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
               TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) 
                  startTime)))
            );

            seekbar.setProgress((int)startTime);
            myHandler.postDelayed(UpdateSongTime,100);
            b2.setEnabled(true);
            b3.setEnabled(false);
         }
      });

      b2.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "Pausing 
               sound",Toast.LENGTH_SHORT).show();
            mediaPlayer.pause();
            b2.setEnabled(false);
            b3.setEnabled(true);
         }
      });

      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            int temp = (int)startTime;

            if((temp+forwardTime)<=finalTime){
               startTime = startTime + forwardTime;
               mediaPlayer.seekTo((int) startTime);
               Toast.makeText(getApplicationContext(),"You have Jumped forward 5 
                  seconds",Toast.LENGTH_SHORT).show();
            }else{
               Toast.makeText(getApplicationContext(),"Cannot jump forward 5
                  seconds",Toast.LENGTH_SHORT).show();
            }
         }
      });

      b4.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            int temp = (int)startTime;

            if((temp-backwardTime)>0){
               startTime = startTime - backwardTime;
               mediaPlayer.seekTo((int) startTime);
               Toast.makeText(getApplicationContext(),"You have Jumped backward 5 
                  seconds",Toast.LENGTH_SHORT).show();
            }else{
               Toast.makeText(getApplicationContext(),"Cannot jump backward 5 
                  seconds",Toast.LENGTH_SHORT).show();
            }
         }
      });
   }

   private Runnable UpdateSongTime = new Runnable() {
      public void run() {
         startTime = mediaPlayer.getCurrentPosition();
         tx1.setText(String.format("%d min, %d sec",
            TimeUnit.MILLISECONDS.toMinutes((long) startTime),
            TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
            toMinutes((long) startTime)))
         );
         seekbar.setProgress((int)startTime);
         myHandler.postDelayed(this, 100);
      }
   };
}

Ниже приводится измененное содержимое файла xml res / layout / activity_main.xml .

В приведенном ниже коде abc указывает логотип tutorialspoint.com

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

   <TextView android:text="Music Palyer" android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />

   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:src="@drawable/abc"/>

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/forward"
      android:id="@+id/button"
      android:layout_alignParentBottom="true"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/pause"
      android:id="@+id/button2"
      android:layout_alignParentBottom="true"
      android:layout_alignLeft="@+id/imageView"
      android:layout_alignStart="@+id/imageView" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/back"
      android:id="@+id/button3"
      android:layout_alignTop="@+id/button2"
      android:layout_toRightOf="@+id/button2"
      android:layout_toEndOf="@+id/button2" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/rewind"
      android:id="@+id/button4"
      android:layout_alignTop="@+id/button3"
      android:layout_toRightOf="@+id/button3"
      android:layout_toEndOf="@+id/button3" />

   <SeekBar
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/seekBar"
      android:layout_alignLeft="@+id/textview"
      android:layout_alignStart="@+id/textview"
      android:layout_alignRight="@+id/textview"
      android:layout_alignEnd="@+id/textview"
      android:layout_above="@+id/button" />

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textAppearance="?android:attr/textAppearanceSmall"
      android:text="Small Text"
      android:id="@+id/textView2"
      android:layout_above="@+id/seekBar"
      android:layout_toLeftOf="@+id/textView"
      android:layout_toStartOf="@+id/textView" />

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textAppearance="?android:attr/textAppearanceSmall"
      android:text="Small Text"
      android:id="@+id/textView3"
      android:layout_above="@+id/seekBar"
      android:layout_alignRight="@+id/button4"
      android:layout_alignEnd="@+id/button4" />

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textAppearance="?android:attr/textAppearanceMedium"
      android:text="Medium Text"
      android:id="@+id/textView4"
      android:layout_alignBaseline="@+id/textView2"
      android:layout_alignBottom="@+id/textView2"
      android:layout_centerHorizontal="true" />

</RelativeLayout>

Ниже приводится содержимое файла res / values ​​/ string.xml .

<resources>
   <string name="app_name">My Application</string>
   <string name="back"><![CDATA[<]]></string>
   <string name="rewind"><![CDATA[<<]]></string>
   <string name="forward"><![CDATA[>>]]></string>
   <string name="pause">||</string>
</resources>

Ниже приводится содержимое файла AndroidManifest.xml .

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.sairamkrishna.myapplication.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

Давайте попробуем запустить ваше приложение. Я предполагаю, что вы подключили свое фактическое мобильное устройство Android к компьютеру. Чтобы запустить приложение из Eclipse, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». Eclipse Run Icon значок с панели инструментов. Перед запуском приложения Android Studio покажет следующие экраны

Anroid MediaPlayer Tutorial

По умолчанию кнопка паузы отключена. Теперь нажмите кнопку воспроизведения, и она станет отключенной, а кнопка паузы станет активной. Это показано на рисунке ниже —

До сих пор музыка играет. Теперь нажмите кнопку паузы и увидите уведомление о паузе. Это показано ниже —

Anroid MediaPlayer Tutorial

Теперь, когда вы снова нажмете кнопку воспроизведения, песня будет воспроизводиться не с начала, а с того места, где она была приостановлена. Теперь нажмите кнопку ускоренной перемотки вперед или назад, чтобы перейти на 5 секунд вперед или назад. Пришло время, когда песню нельзя перескочить вперед. В этот момент появится уведомление, которое будет примерно таким —

Anroid MediaPlayer Tutorial

Ваша музыка будет играть в фоновом режиме, пока вы выполняете другие задачи на своем мобильном телефоне. Чтобы остановить его, вы должны выйти из этого приложения из фоновых действий.

Anroid MediaPlayer Tutorial

Выше изображение показывает, когда вы нажимаете кнопку перемотки.