安卓作業----慕課移動應用開發作業16之利用service實現簡單音樂播放器

本篇運用Button 進行界面佈局,使用Service的兩種啓動方式,並對按鈕進行事件監聽,實現簡單的音樂播放器

同時這也是中國大學慕課移動終端應用開發的網課作業16,我會持續更新我的作業,如果有需要關注一下吧

學習建議:

有關service的知識,我推薦此篇博文:務必知道的Android service的完全詳解

代碼部分:

1.MainActivity.java
public class MainActivity extends AppCompatActivity {
    private Button mButton1,mButton2,mButton3,mButton4;

    ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //此項目較爲簡單啥也不用做
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            //此項目較爲簡單啥也不用做
        }
    };

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

        //啓動音樂播放
        mButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"啓動音樂播放",Toast.LENGTH_SHORT).show();
                startService(MyMusicService.createIntent(MainActivity.this));
            }
        });

        //停止音樂播放
        mButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"停止音樂播放",Toast.LENGTH_SHORT).show();
                stopService(MyMusicService.createIntent(MainActivity.this));
            }
        });

        //綁定音樂播放
        mButton3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"綁定音樂播放",Toast.LENGTH_SHORT).show();
                bindService(MyMusicService.createIntent(MainActivity.this),mConnection, Context.BIND_AUTO_CREATE);
            }
        });

        //解綁音樂播放
        mButton4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"解綁音樂播放",Toast.LENGTH_SHORT).show();
                unbindService(mConnection);
            }
        });
    }

    private void init(){
        mButton1 = findViewById(R.id.button1);
        mButton2 = findViewById(R.id.button2);
        mButton3 = findViewById(R.id.button3);
        mButton4 = findViewById(R.id.button4);
    }
}
主佈局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="啓動音樂播放"
        android:textSize="25dp"
        android:layout_marginTop="20dp"
        android:background="#FCFAB7"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="停止音樂播放"
        android:textSize="25dp"
        android:layout_marginTop="20dp"
        android:background="#FAB8E7"/>
    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="綁定音樂播放"
        android:textSize="25dp"
        android:layout_marginTop="20dp"
        android:background="#DAFCB7"/>
    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="解綁音樂播放"
        android:textSize="25dp"
        android:layout_marginTop="20dp"
        android:background="#F37040"/>


</LinearLayout>
Service:MyMusicService.java

記得在AndroidManifest.xml中註冊服務,或者直接使用as提供的快捷創建service功能,他會自動註冊。

public class MyMusicService extends Service {
    private MediaPlayer mMediaPlayer;

    @Override
    public void onCreate() {
        super.onCreate();
        mMediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.music);
        mMediaPlayer.setLooping(true);//重複播放
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        mMediaPlayer.start();//打開音樂
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mMediaPlayer.stop();//關閉音樂
    }

    public MyMusicService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        mMediaPlayer.start();
        return null;//這個項目不需要返回
    }

    @Override
    public boolean onUnbind(Intent intent) {
        mMediaPlayer.stop();
        return super.onUnbind(intent);
    }

    /**
     * 爲什麼這麼寫?
     * 這是一種思想,寫intent的最優固定模式
     * 假設需要傳遞數據,就可以封裝起來,具體可見:
     * https://blog.csdn.net/baidu_41860619/article/details/104426980
     * */
    public static Intent createIntent(Context context){
        return new Intent(context, MyMusicService.class);
    }
}

音樂資源

在res下新建一個raw文件夾,將音頻文件放入,命名爲music.xxx
在這裏插入圖片描述

總結

如果有什麼問題,請私信聯繫我或者在評論區留言
碼字不易,若有幫助,給個關注和讚唄

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章