1. 程式人生 > 程式設計 >Android Studio實現音樂播放器

Android Studio實現音樂播放器

Androidstudio音樂播放器,供大家參考,具體內容如下

實現目的:利用廣播在myapplication中原本button點我暫停按鈕是灰色無法點選的,此時傳送一條簡訊給自己的安卓手機,按鈕變成黑色,音樂開始播放,此時點選 點我暫停 按鈕,音樂停止。

結果截圖:

傳送簡訊給自己後:,點我暫停 按鈕變成黑色,並開始播放音樂:

Android Studio實現音樂播放器

Android Studio實現音樂播放器

Android Studio實現音樂播放器

此時點選點我暫停按鈕,音樂暫停

廣播

Android 應用與 Android 系統和其他 Android 應用之間可以相互收發廣播訊息,這與釋出-訂閱設計模式相似。這些廣播會在所關注的事件發生時傳送。舉例來說,Android 系統會在發生各種系統事件時傳送廣播,例如系統啟動或裝置開始充電時。再比如,應用可以傳送自定義廣播來通知其他應用它們可能感興趣的事件(例如,一些新資料已下載)。

廣播訊息本身會被封裝在一個Intent物件中,該物件的操作字串會標識所發生的事件(例如 android.intent.action.AIRPLANE_MODE )。該 Intent 可能還包含繫結到其 extra 欄位中的附加資訊。例如,飛航模式 intent 包含布林值 extra 來指示是否已開啟飛航模式。

xml檔案

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="@drawable/loading">

 <Button
  android:text="BUTTON"
  android:layout_marginTop="@android:dimen/app_icon_size"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:onClick="send"/>

</LinearLayout>

mainactivity.java檔案

package com.example.myapplication;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

 private Button btnStop;
 private boolean isCast; //是否為廣播啟用

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  if (ContextCompat.checkSelfPermission(this,Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED){
   ActivityCompat.requestPermissions(this,new String[]{"android.permission.RECEIVE_SMS"},1);
  }
  btnStop=findViewById(R.id.btnStop);
  Intent intent = getIntent(); //獲取廣播意圖物件
  isCast = intent.getBooleanExtra("iscast",false); //預設值為false
  btnStop.setEnabled(isCast); //設定停止按鈕可用和單擊監聽
  if(isCast) Toast.makeText(this,"正在播放音樂...",Toast.LENGTH_SHORT).show();
  btnStop.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v){
    //顯式服務呼叫意圖(非繫結式)
    Intent intent=new Intent(MainActivity.this,MyAudioService.class);
    //在Activity元件裡,停止音樂播放服務
    stopService(intent);
    isCast=false;
    btnStop.setEnabled(isCast);
//    finish(); //銷燬本活動
   }
  });
 }
 @Override
 public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
  super.onRequestPermissionsResult(requestCode,permissions,grantResults);
  switch (requestCode){
   case 1:
    if(grantResults[0]!=PackageManager.PERMISSION_GRANTED){
     Toast.makeText(this,"未授權,無法實現預定的功能!",Toast.LENGTH_SHORT).show();
     finish();
    }else{
     Toast.makeText(this,"請發一條簡訊驗證...",Toast.LENGTH_SHORT).show();
    }
  }
 }
}

SmsReceiver.java檔案

編寫廣播接收者程式

package com.example.myapplication;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

/*
 本廣播接收者程式分別呼叫了應用的主Activity程式和播放音樂的服務程式
*/
public class SmsReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context,Intent intent) {

  Intent serviceIntent = new Intent(context,MyAudioService.class);
  //在廣播元件裡,通過上下文物件啟動音樂播放服務元件
  context.startService(serviceIntent);

  //新建呼叫Activity元件的意圖
  Intent activityIntent = new Intent(context,MainActivity.class);
  activityIntent.putExtra("iscast",true); //攜帶資料
  //新建棧用來存放被啟動的Activity(當已經存在時,只做移動處理)
  activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  //在廣播元件裡,通過上下文物件啟動Activity元件
  context.startActivity(activityIntent);
 }
}

MyAudioService.java檔案

package com.example.myapplication;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;


public class MyAudioService extends Service {
 MediaPlayer mediaPlayer;

 @Override
 public IBinder onBind(Intent intent) {
  return null;
 }
 @Override
 public void onCreate() {
  mediaPlayer = MediaPlayer.create(this,R.raw.liyue);//建立音樂服務。播放R.raw中的音樂liyue
  mediaPlayer.start();//開始服務
 }
 @Override
 public void onDestroy() {
  mediaPlayer.stop();
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。