如何在Android中使用Studio实现一个音乐播放器功能
创始人
2024-11-20 15:41:42
0次

实现目的:利用广播在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"?>


 

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();
 }
}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...