一、只用Activity 容易出现问题

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: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"
tools:context="com.example.chenshuai.myapplication.ActivityMusic"
android:orientation="vertical"> <TextView
android:layout_width="match_parent"
android:layout_height="40sp"
android:text="播放状态"
android:textSize="20sp"
android:gravity="center_horizontal"
android:id="@+id/tv_1"/> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"> <Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="播放"
android:onClick="play_onclick"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="暂停"
android:onClick="pause_onclick"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="停止"
android:onClick="stop_onclick"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="退出"
android:onClick="exit_onclick"/>
</LinearLayout> </LinearLayout>

java

package com.example.chenshuai.myapplication;

import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView; public class ActivityMusic extends AppCompatActivity { TextView tv_1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_music); tv_1 = (TextView)findViewById(R.id.tv_1); tv_1.setText("播放状态:停止播放。。。");
} //媒体播放器 定义成员变量
private MediaPlayer mediaPlayer;
public void play_onclick(View view)
{
if (mediaPlayer == null) {
//调用MediaPlayer的静态方法create
mediaPlayer = MediaPlayer.create(this, R.raw.tangren);
} mediaPlayer.start(); tv_1.setText("播放状态:正在播放。。。");
} public void stop_onclick(View view)
{
if (mediaPlayer != null) {
mediaPlayer.stop();//停止
mediaPlayer.reset();//重置
mediaPlayer.release();//释放资源
mediaPlayer = null;//重新赋值为空
}
tv_1.setText("播放状态:停止播放。。。");
}
public void pause_onclick(View view)
{
if (mediaPlayer != null && mediaPlayer.isPlaying())
{
mediaPlayer.pause(); tv_1.setText("播放状态:暂停播放。。。");
}
}
public void exit_onclick(View view)
{
stop_onclick(view);
finish();
}
}

效果:

二、用Service实现

同一个xml

ActivityMusicservice.java
package com.example.chenshuai.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView; public class ActivityMusicservice extends AppCompatActivity { TextView tv_1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_music); tv_1 = (TextView)findViewById(R.id.tv_1); tv_1.setText("播放状态11:停止播放。。。");
}
public void play_onclick(View view)
{
Intent intent = new Intent(this,MyServiceMusic.class); intent.putExtra("action","play"); startService(intent); tv_1.setText("播放状态11:正在播放。。。");
} public void stop_onclick(View view)
{
Intent intent = new Intent(this,MyServiceMusic.class); intent.putExtra("action","stop"); startService(intent); tv_1.setText("播放状态11:停止播放。。。");
}
public void pause_onclick(View view)
{
Intent intent = new Intent(this,MyServiceMusic.class); intent.putExtra("action","pause"); startService(intent); tv_1.setText("播放状态11:暂停播放。。。");
}
public void exit_onclick(View view)
{
stop_onclick(view);
finish();
}
}
MyServiceMusic.java
package com.example.chenshuai.myapplication;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder; public class MyServiceMusic extends Service {
public MyServiceMusic() {
} @Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
private MediaPlayer mediaPlayer; @Override
public int onStartCommand(Intent intent, int flags, int startId) { //获取意图传递的信息
String action = intent.getStringExtra("action"); switch (action)
{
case "play":
if (mediaPlayer == null)
{
mediaPlayer = MediaPlayer.create(this,R.raw.onceagain);
}
mediaPlayer.start(); break;
case "stop":
if (mediaPlayer !=null)
{
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer = null;
}
break;
case "pause":
if (mediaPlayer !=null && mediaPlayer.isPlaying())
{
mediaPlayer.pause();
}
break;
}
return super.onStartCommand(intent, flags, startId);
}
}

minifest.xml

<service
android:name=".MyServiceMusic"
android:enabled="true"
android:exported="true" />

效果:

Android——用Activity和Service实现简单的音乐播放器的更多相关文章

  1. 简单的音乐播放器(VS 2010 + Qt 4.8.5)

    昨天历经千辛万苦,配置好了VS 2010中的Qt环境(包括Qt for VS插件),今天决定浅浅地品味一下将两者结合进行编程的魅力. 上网查了一些资料,学习了一些基础知识,决定做一个简单的音乐播放器, ...

  2. swift3.0 简单直播和简单网络音乐播放器

    本项目采用swift3.0所写,适配iOS9.0+,所有界面均采用代码布局. 第一个tab写的是简单直播,传统MVC模式,第二个tab写的是简单网络音乐播放器.传说MVVM模式(至于血统是否纯正我就不 ...

  3. 使用Service组件实现简单的音乐播放器功能 --Android基础

    1.本例利用Service实现简单的音乐播放功能,下面是效果图.(点击开始播放开启服务,音乐播放,点击“停止播放”关闭服务,音乐停止播放.) 2.核心代码: MusicService.java: pa ...

  4. Android学习笔记_24_多媒体MediaPlayer对象之音乐播放器与SoundPool声音池

    一.MediaPlayer对象常用方法介绍: MediaPlayer mediaPlayer = new MediaPlayer(); if (mediaPlayer.isPlaying()) { m ...

  5. 用PHP+H5+Boostrap做简单的音乐播放器(进阶版)

    前言:之前做了一个音乐播放器(纯前端),意外的受欢迎,然后有人建议我把后台一起做了,正好也想学习后台,所以学了两天php(不要吐槽我的速度,慢工出细活嘛~)然后在之前的基础上也又完善了一些功能,所以这 ...

  6. Android课程---简单的音乐播放器

    第一个:用Activity实现 activity_music_play1.xml <?xml version="1.0" encoding="utf-8" ...

  7. 用H5+Boostrap做简单的音乐播放器

    前言:这个是综合一下我最近在学的东西做的小Demo,到实际使用还有距离,但是用来练手巩固知识点还是不错的,最近在二刷JS书和Boostrap.css的源码,做完这个Demo也算是暂告一段落,接下来是j ...

  8. HTML5+CSS3+jquery实现简单的音乐播放器

    ...最近天热的,感觉就像煎饼...然后别人在把妹子的时候,只有偶们这帮苦逼的程序员在那边撸代码...我日哦! 然后今天晒的是偶早年写的一个播放器...看上去是不是很有感觉的样子!一番宝物,Lisa唱 ...

  9. Android 音视频深入 十三 OpenSL ES 制作音乐播放器,能暂停和调整音量(附源码下载)

    项目地址https://github.com/979451341/OpenSLAudio OpenSL ES 是基于NDK也就是c语言的底层开发音频的公开API,通过使用它能够做到标准化, 高性能,低 ...

随机推荐

  1. 从sys/power/state分析并实现S3C2416的睡眠和唤醒

    环境: PC: debian-7.6.0 ARM CPU: S3C2416 Linux-Kernel: 3.6.0(FriendlyARM) U-boot: 1.3.4 一.问题来源 依据须要,在S3 ...

  2. (面试)Statement和PrepareStatement有什么区别

    (1)Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句.PrepareStatement是预编译的sql语句对象,sql语句被预编译并保存在对象中.被封装的sql ...

  3. javascript的事件机制(百度文库)

    http://wenku.baidu.com/view/9c8761e1524de518964b7d65.html http://wenku.baidu.com/view/1c3d7228bd6478 ...

  4. Raid介绍

    https://wsgzao.github.io/post/raid/ http://www.cnblogs.com/Bob-FD/p/3409221.html

  5. Vivado SPI Flash程序下载

    由于Vivado下载程序步骤和ISE有较大差异,特此写此文章,希望对大家有所帮助. 1,下载文件生成 在.bit文件生成后,在TCL中输入 write_cfgmem -format mcs -inte ...

  6. 【Unity】7.2 鼠标输入

    分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 在桌面系统的游戏中,鼠标输入是最基本的输入方式之一.游戏很多操作都需要鼠标来完成,例如武器的瞄准和开火.菜单的单击.物体 ...

  7. PS辅助工具Assistor PS

    Assistor PS是一个功能强大的PS辅助工具,它可以切图.标坐标.尺寸.文字样式注释.画参考线等功能,可以为设计师节省很多时间.该PS工具原本需要每月付费$9.99美元,但在今年6月开始,将免费 ...

  8. morgan日志分割

    var FileStreamRotator = require('file-stream-rotator') var express = require('express') var fs = req ...

  9. SQL Server 2008 R2:error 26 开启远程连接详解

    远程连接sql server 2008 数据库,出现下面的错误: <--在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.    未找到或无法访问服务器.请验证实例名称是 ...

  10. (原创)结构体自动化转为char数组的实现

    结构体自动化转换为char数组这个需求,来自于一个最近开发的一个项目,在项目开发过程中遇到一个小问题,需要将各种结构体拷贝到char数组中,这对于一个简单的结构体来说是很简单的事情,比如下面这个只有整 ...