Android开启新线程播放背景音乐

在本实例用,开启一个新的线程播放背景音乐,在音乐文件播放完毕后,暂停5秒后重新开始播放。

具体实现:

界面(只有一个"开始"按钮)
res/layout/main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/linearLayout1"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" > 

  <Button
   android:id="@+id/button1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="开始" /> 

</LinearLayout> 

在res/文件夹下创建raw目录,在raw/下放置需要播放的背景音乐文件(这里放置的是flower.mp3文件)

MainActivity:

package com.example.test; 

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; 

public class MainActivity extends Activity{
 private Thread thread;//声明一个线程对象
 private static MediaPlayer mp=null;//声明一个MediaPlayer对象
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main); 

  Button startButton=(Button)findViewById(R.id.button1);//获取开始按钮
  startButton.setOnClickListener(new OnClickListener() { 

   @Override
   public void onClick(View v) {
     ((Button)v).setEnabled(false);//设置按钮不可用
     //创建一个用于播放背景音乐的线程
     thread=new Thread(new Runnable(){ 

     @Override
     public void run() {
      playBGSound();//播放背景音乐 

     } 

     });
     thread.start();//开启线程
   }
  }); 

 } 

 private void playBGSound() {
  if(mp!=null){
   mp.release();//释放资源
  }
  mp=MediaPlayer.create(MainActivity.this, R.raw.flower);
  mp.start();
  //为MediaPlayer添加播放完成事件监听
  mp.setOnCompletionListener(new OnCompletionListener() { 

   @Override
   public void onCompletion(MediaPlayer mp) {
    try {
     Thread.sleep(5000);//让线程休眠5秒
     <span style="white-space:pre">   </span>playBGSound();//重新播放音乐
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } 

   }
  });
 } 

 @Override
 protected void onDestroy() {
  if(mp!=null){
   mp.stop();
   mp.release();
   mp=null;
  }
  if(thread!=null){
   thread=null;
  }
  super.onDestroy();
 } 

} 

运行结果:点击开始按钮,按钮将变成不可用状态,并且开始播放背景音乐,界面如图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android studio 3.0 service项目背景音乐实现

    这篇文章是博主在通过学习Android Studio的同时,实现service项目中用于背景音乐的实现,邮件的发送用于随堂小测的发送邮件功能.其中也碰到需要坑和错误,最后都解决了,一起跟着学习一下吧.如果大家有更好的方法可以在下面的留言区讨论. 本次项目我主要负责Android studio的后端,以及游戏文案游戏策划,结果后来事情太散了,Android studio学的不咋地,文案写完还有帮着写一写数据库的插入语句,然后就是跟队友完成了as的后台插入声音的代码.接下来介绍的service项目中

  • android中暂停背景音乐

    网上有很多暂停背景音乐的例子,最多的就是根据暂停的指令去发广播来暂停音乐.其实这种方式很不靠谱,为什么?因为其他的播放器不一定注册监听了那个广播,所以大多数情况是不起作用的. 下面有一种比较靠谱的方式,是通过触发媒体的按钮来操作播放器状态. 复制代码 代码如下: sendMediaButton(context,<span style="font-size:9pt;line-height:1.5;color:#2B91AF;">KeyEvent</span><

  • Android通过startService播放背景音乐

    关于startService的基本使用概述及其生命周期可参见<Android中startService基本使用方法概述>. 本文通过播放背景音乐的简单示例,演示startService的基本使用流程,具体内容如下 系统界面如下: 界面上面就两个按钮,"播放音乐并退出Activity" 和 "停止播放音乐".我们在该示例中,通过操纵Activity的按钮控制MusicService播放或停止播放音乐. 我将一个名为music.mp3的放到资源目录/res/

  • Android开启新线程播放背景音乐

    在本实例用,开启一个新的线程播放背景音乐,在音乐文件播放完毕后,暂停5秒后重新开始播放. 具体实现: 界面(只有一个"开始"按钮) res/layout/main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t

  • Android开启新线程实现电子广告牌项目

    利用之前学过的多线程处理技术,我们做一个开启新线程实现电子广告牌的项目 界面布局文件,加入ImageView图片控件,用于显示一个图片,一个TextView控件,用于显示广告说明语. res/layout/main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro

  • Java开启新线程并传参方法代码实现

    一.继承Thread类 步骤: 1):定义一个类A继承于Java.lang.Thread类. 2):在A类中覆盖Thread类中的run方法. 3):我们在run方法中编写需要执行的操作:run方法里的代码,线程执行体. 4):在main方法(线程)中,创建线程对象,并启动线程: (1)创建线程类对象: A类 a = new A类(); (2)调用线程对象的start方法: a.start();//启动一个线程 注意:千万不要调用run方法,如果调用run方法好比是对象调用方法,依然还是只有一个

  • Android中使用TextureView播放视频

    如果你想显示一段在线视频或者任意的数据流比如视频或者OpenGL 场景,你可以用android中的SurfaceView或者TextureView做到. 1).TextureView的兄弟SurfaceView 应用程序的视频或者opengl内容往往是显示在一个特别的UI控件中:SurfaceView. SurfaceView的工作方式是创建一个置于应用窗口之后的新窗口.这种 方式的效率非常高,因为SurfaceView窗口刷新的时候不需要重绘应用程序的窗口(android普通窗口的视图绘制机制

  • 详解Android进程和线程

    写在前面的话 一个Android应用就是一个Linux进程,每个应用在各自的进程中运行,互不干扰,比较安全. 一个应用对应一个主线程,就是通常所说的UI线程,android遵守的就是单线程模型,所以说Ui操作不是线程安全的并且这些操作必须在UI线程中执行. 本文是对官方文档的翻译,原文链接:https://developer.android.com/guide/components/processes-and-threads.html 概述 当某个应用组件启动且该应用没有运行其他任何组件时,An

  • Android Studio实现音乐播放器2.0的全过程

    目录 一.引言 二.项目概述 1.需求分析 2.设计分析 3.资源文件分析 三.开发环境 四.优化设计 1.上一首下一首 2.个性化按钮 五.运行效果 六.项目总结 一.引言 我在一年前发过一篇用Android实现音乐播放器的教程:Android Studio如何实现音乐播放器(简单易上手).当时实现的功能也很简单,就是播放音乐.暂停音乐.继续播放.退出播放.显示音乐列表和专辑封面的功能.如下图所示: 期间有很多同学问到我是否可以加上一首下一首功能,确实可以加,只要获取到歌曲文件的下标posit

  • 一文彻底了解Android中的线程和线程池

    目录 前言 1.主线程和子线程 2.Android中的线程形态 2.1 AsyncTask 2.2 AsyncTask的工作原理 2.3 HandleThread 2.4 IntentService 3.Android中的线程池 3.1 ThreadPoolExecutor 3.2线程池的分类 总结 前言 从用途上来说Android的线程主要分为主线程和子线程两类,主线程主要处理和界面相关的工作,子线程主要处理耗时操作.除Thread之外,Android中还有其他扮演线程的角色如AsyncTas

  • Android 开源在线音乐播放器

    封面图:  简介 波尼音乐是一款开源Android在线音乐播放器. 播放本地音乐与在线音乐 在线音乐排行榜,如热歌榜.新歌榜等 高仿云音乐的黑胶唱片专辑封面 歌词显示,自动搜索歌词 夜间模式 定时关闭 更新说明 v 1.0 First Release TODO 在线音乐可以免下载加入我的音乐列表 在线音乐自动缓存 编辑音乐信息 项目公开API 在线音乐:百度音乐 天气数据:高德地图 开源技术 okhttp-utils Android-Universal-Image-Loader 关键代码 黑胶唱

  • Android 开发中线程的分析

    Android 开发中线程的分析 今天早上把公司给的任务做完了之后,突然就有点无聊,于是,把以前学的那些东西翻了翻,博客看了看,就看到一个关于线程的博客,有了很大的争议,我也差点误解了(感觉高大上~~~).整体代码差不多是这样: package sw.angel.thread; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; pub

随机推荐