android music player

Service and broadcast to implement music player
first look example:



MusiceService code

package mm.shandong.com.testsimplemedia.service;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import android.os.IBinder;

public class MusicService extends Service {

    int currentMusic = 0;//0 means no music playing, 1 means paused, 2 means playing,
    int status;
    MediaPlayer mp;
    String[] musics = new String[]{"first.mp3", "second.mp3", "third.mp3"};
    AssetManager am;

    public MusicService() {

    }

    @Override
    public void onCreate() {
        am = getAssets();
        mp = new MediaPlayer();

        mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                currentMusic++;
                currentMusic = currentMusic % musics.length;
                playMusic ();
                status = 2;
                Intent intentTemp = new Intent("Update_Music_State");
                intentTemp.putExtra("status", status);
                intentTemp.putExtra("currentMusic", currentMusic);
                sendBroadcast (intentTemp);

            }
        });
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("Get_Music_Control");
        ///Dynamic registration of broadcast receivers for player changes
        MusicServiceReceiver musicServiceReceiver = new MusicServiceReceiver();
        registerReceiver(musicServiceReceiver, intentFilter);
        super.onCreate();

    }

    public class MusicServiceReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            int control = intent.getIntExtra("control", 0);
            switch (control) {
                case 0:
                    //pause
                    if (status == 2) {
                        mp.pause();
                        status = 1;
                    }

                    break;
                case 1:
                    ///Play
                    if (status == 0) {
                        playMusic ();
                        status = 2;
                    } else if (status == 1) {
                        mp.start();
                        status = 2;
                    }
                    break;
                case 3:
                    break;
                case 4:
                    //previous song
                    if (status == 0) {
                        if (currentMusic == 0) {
                            currentMusic = 2;
                        } else {
                            currentMusic--;
                        }
                    } else if (status == 1) {
                        if (currentMusic == 0) {
                            currentMusic = 2;
                        } else {
                            currentMusic--;
                        }
                        status = 0;

                    } else if (status == 2) {
                        if (currentMusic == 0) {
                            currentMusic = 2;
                        } else {
                            currentMusic--;
                        }
                        playMusic ();
                    }
                    break;
                case 5:
                    //next song
                    if (status == 0) {
                        if (currentMusic == 2) {
                            currentMusic = 0;
                        } else {
                            currentMusic++;
                        }
                    } else if (status == 1) {
                        if (currentMusic == 2) {
                            currentMusic = 0;
                        } else {
                            currentMusic++;
                        }
                        status = 0;

                    } else if (status == 2) {
                        if (currentMusic == 2) {
                            currentMusic = 0;
                        } else {
                            currentMusic++;
                        }
                        playMusic ();
                    }

                    break;
            }
            Intent intentTemp = new Intent("Update_Music_State");
            intentTemp.putExtra("status", status);
            intentTemp.putExtra("currentMusic", currentMusic);
            sendBroadcast (intentTemp);

        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    public void playMusic() {
        try {

            AssetFileDescriptor ad = am.openFd(musics[currentMusic]);
            mp.reset();
            mp.setDataSource(ad.getFileDescriptor(), ad.getStartOffset(), ad.getLength());
            //  mp.create(this,musics[currentMusic]);
            mp.prepare();
            mp.start();
        } catch (Exception e) {
            e.printStackTrace ();
        }
    }
}


TestSimpleMediaActivity code
package mm.shandong.com.testsimplemedia;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;

import mm.shandong.com.testsimplemedia.service.MusicService;

public class TestSimpleMediaActivity extends AppCompatActivity {
    ImageButton imageButton;
    TextView textViewMp3Name;
    TextView textViewMp3Author;
    int status = 0;
    String[] authors = new String[]{"Zhang San", "Li Si", "Wang Er"};
    String[] names = new String[]{"first", "second", "thrid"};
    int currentMusic = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView(R.layout.activity_test_simple_media);
        imageButton = (ImageButton) findViewById(R.id.imageButton);
        textViewMp3Name = (TextView) findViewById(R.id.textViewMp3Name);
        textViewMp3Author = (TextView) findViewById(R.id.textViewMp3Author);
        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("Get_Music_Control");

                if (status == 2) {
                    intent.putExtra("control", 0);

                } else {
                    intent.putExtra("control", 1);
                }
                sendBroadcast (intent);
            }
        });
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("Update_Music_State");
        MusicStatusReceiver musicStatusReceiver = new MusicStatusReceiver();
        / / Dynamically register the broadcast receiver of activity changes
        registerReceiver(musicStatusReceiver, intentFilter);
        Intent intent = new Intent(this, MusicService.class);
        startService(intent);

        Intent intentMusicReceiver = new Intent("Get_Music_Control");
        intentMusicReceiver.putExtra("control", 3);
        sendBroadcast (intentMusicReceiver);

    }
    ///Previous song
    public void preMusic(View view) {
        Intent intentMusicReceiver = new Intent("Get_Music_Control");
        intentMusicReceiver.putExtra("control", 4);
        sendBroadcast (intentMusicReceiver);
    }
    ///next song
    public void nextMusic(View view) {
        Intent intentMusicReceiver = new Intent("Get_Music_Control");
        intentMusicReceiver.putExtra("control", 5);
        sendBroadcast (intentMusicReceiver);
    }
   ///Define the broadcast receiver that manipulates the music
    public class MusicStatusReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            status = intent.getIntExtra("status", 0);
            currentMusic = intent.getIntExtra("currentMusic", 0);
            switch (status) {
                case 0:
                    textViewMp3Name.setText(names[currentMusic]);
                    textViewMp3Author.setText(authors[currentMusic]);
                    imageButton.setBackgroundResource(R.drawable.play32);
                    break;
                case 1:
                    textViewMp3Name.setText(names[currentMusic]);
                    textViewMp3Author.setText(authors[currentMusic]);
                    imageButton.setBackgroundResource(R.drawable.play32);
                    break;
                case 2:
                    imageButton.setBackgroundResource(R.drawable.pause32);
                    textViewMp3Name.setText(names[currentMusic]);
                    textViewMp3Author.setText(authors[currentMusic]);
                    break;
            }
        }
    }
}


Layout file code:

<?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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <ImageButton
        android:id="@+id/imageButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textViewMp3Author"
        android:layout_alignStart="@+id/textViewMp3Author"
        android:layout_below="@+id/textViewMp3Author"
        android:background="@drawable/play32" />

    <TextView
        android:id="@+id/textViewMp3Name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="song name"
        android:textSize="30sp" />

    <TextView
        android:id="@+id/textViewMp3Author"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textViewMp3Name"
        android:layout_centerHorizontal="true"
        android:text="author"
        android:textSize="15sp" />

    <Button
        android:id="@+id/button10"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageButton"
        android:layout_toLeftOf="@+id/textViewMp3Name"
        android:layout_toStartOf="@+id/textViewMp3Name"
        android:onClick="preMusic"
        android:text="previous song" />

    <Button
        android:id="@+id/button11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageButton"
        android:layout_toEndOf="@+id/textViewMp3Name"
        android:layout_toRightOf="@+id/textViewMp3Name"
        android:onClick="nextMusic"
        android:text="Next" />
</RelativeLayout>




[color=red]If you want the source code, please leave your email. [/color]
Demo download
Finally , the above examples are all sourced from Android worry-free, please go to the application treasure or pea pod to download: http://android.myapp.com/myapp/detail.htm?apkName=com.shandong.mm. androidstudy , the source code example document is exhausted.

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326643615&siteId=291194637