1. 程式人生 > >android在service中播放音樂

android在service中播放音樂

Android大作業確實挺難的,斷斷續續半個月到現在還有幾個功能沒有完成(中間又去忙了點其他事),到現在為止最強烈的感受是學習安卓是非常需要經驗的活計,而且資料也不像之前學習的演算法,c++之類的非常詳實(像刷oj一搜poj****全是題解,而且都是正確的)我按照網上的部落格一模一樣照打的都能報錯....(巨坑啊)

我個人參考的是《第一行程式碼》這本書,它對於初學者相當友好,不過在背景音樂的播放中出現了些困難.

現在要求是在任意演示頁面都應該播放背景音樂,很明顯如果直接寫在activity中,那麼一旦service停止了(跳轉到其他頁面)就會關閉背景音樂,而且也很難處理在需要的時候關閉音樂(放視訊,退出app)故應將音樂的播放寫在service中.

為了使用者的體驗(毛的使用者啊,估計老師也就隨便瞄兩眼....),我們在開始設定一個提問框,詢問是否開啟音樂

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.widget.ImageView;
public class question extends BaseActivity{//question.class
    @Override
	protected void onCreate(Bundle savedInstanceState) {
	 super.onCreate(savedInstanceState);
	 setContentView(R.layout.layout_question);//佈局檔案叫layout_question
         AlertDialog.Builder dialog = new AlertDialog.Builder(question.this);//彈出對話方塊,判斷是否需要開啟音樂
      dialog.setTitle("注意");
      dialog.setMessage("是否播放音樂");
      dialog.setCancelable(false);
      dialog.setPositiveButton("否",new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface arg0, int arg1) {
			  Intent intent = new Intent(question.this,MainActivity.class);
		      intent.putExtra("extra_data","0");//向MainActivity傳遞值
		      startActivity(intent);
			 }
		});
      dialog.setNegativeButton("是",new DialogInterface.OnClickListener(){
    	   @Override
			public void onClick(DialogInterface arg0, int arg1) {
			  Intent intent = new Intent(question.this,MainActivity.class);
		      intent.putExtra("extra_data","1");//向MainActivity傳遞值
		      startActivity(intent);
			 }
      });
     dialog.show();
}
}
這裡有一個向後面傳值的過程,因為我要知道前面一個activity使用者選擇的值,因為我不知道如何傳遞布林型別的值,所以直接傳了兩種字串過去,是"1"就開啟音樂,是"0"就暫時不開啟音樂

MainActivity.class

public class MainActivity extends BaseActivity {
	private Button button1;//成長曆程
	private Button button2;//興趣愛好
	private Button button3;//一鍵關注
	private Button button4;//退出
	private boolean MusicSwitch;//判斷音樂是否開啟(true為播放,false為不播放)
	private ImageView imageView;
	@Override
    protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = getIntent();
        String s=intent.getStringExtra("extra_data");//獲得上一次的是否開啟音樂的值
        if (s.equals("1")) MusicSwitch=true;
          else MusicSwitch=false;
         imageView = (ImageView) findViewById(R.id.image_view);//例項化對應的插圖
        if (MusicSwitch) {
        	 Intent intentSV=new Intent(MainActivity.this,MyService.class);
        	 startService(intentSV);
        	 imageView.setImageResource(R.drawable.music_start);
         }
           else   imageView.setImageResource(R.drawable.music_off);
           imageView.setOnClickListener(new OnClickListener() {//當圖示被按時可以開關音樂
			@Override
			public void onClick(View arg0) {
				if (MusicSwitch) {
				    imageView.setImageResource(R.drawable.music_off);
					MusicSwitch = false;
					Intent intentSV=new Intent(MainActivity.this,MyService.class);
					stopService(intentSV);
				}
				else    {
					imageView.setImageResource(R.drawable.music_start);
					MusicSwitch = true;
					try{
						Intent intentSV=new Intent(MainActivity.this,MyService.class);
						startService(intentSV);
					}catch(Exception e){
						e.printStackTrace();  
					}
					}
			}
	});
        	//後面省略無關程式碼
     }
}
} 


這裡我用了兩個個插圖,如果MusicSwitch為真就播放音樂,同時表現音樂開啟的圖示,否則就不播放音樂,展示音樂關閉的圖示,而每一次點選關閉和開啟都會改變MusicSwitch的值.

另外說下插圖一般在res下的draw****的第一個資料夾下,直接將圖片移進去就好.

而本文的重點就是

 Intent intentSV=new Intent(MainActivity.this,MyService.class);
        	 startService(intentSV);


Service是什麼,個人感覺說白了就是一些你希望只要在某個頁面開啟後,在後臺默默持續工作,知道某個頁面可以隨時關閉的無名英雄.而音樂就是隻聞其聲不見其人所以兩者絕配啊。

裡面有onCreate,onStartCommand,onDestroy,onBind等方法

一旦知道使用者要開啟音樂,我們可以呼叫startService(),它會呼叫在onStartCommand時建立一個MediaPlayer物件來放音樂,而一旦知道使用者要關閉音樂,我們可以呼叫

stopService,它會呼叫onDestory銷燬MediaPlayer物件,由於我對於Service的操作是隨時隨地的,而且只要不操作這個Service將一直跑下去,那麼就符合我們的要求.

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

public class MyService extends Service{
	private MediaPlayer mp;
	@Override
	public void onCreate(){
		super.onCreate();//繼承onCreate方法
		try{
			mp= new MediaPlayer();
			mp=MediaPlayer.create(MyService.this,R.raw.music);
		}catch(IllegalStateException e){
		 e.printStackTrace();
		}
	}
	@Override
	public IBinder onBind(Intent intent){
		return null;
	}
	@Override
	public int onStartCommand(Intent intent,int flags,int startId){
		mp.start();
        mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {  
			  public boolean onError(MediaPlayer mp, int what, int extra) {  
	                // TODO Auto-generated method stub  
	                // 釋放資源  
	                try {  
	                    mp.release();  
	                } catch (Exception e) {  
	                    e.printStackTrace();  
	                }  
	                return false;  
	            }  
	        }); 
		 return super.onStartCommand(intent, flags, startId);
     }
	
	   @Override  
	    public void onDestroy(){//服務停止時停止播放音樂並釋放資源
		mp.stop();
		mp.release();
		mp=null;
		super.onDestroy();
}
}

音樂我是在res下新建一個raw資料夾,將mp3檔案直接放進去即可,用法是
mp=MediaPlayer.create(MyService.this,R.raw.music);
第一個是活動名(這裡是服務名)。

當然不要忘記註冊這個Service.

相關推薦

Android 如何在通話播放音樂/通話背景音

1.修改AudioService.java,實現通話中播放音樂 private boolean canReassignAudioFocus() {         // focus requests are rejected during a phone call or when the phone is r

android在service播放音樂

Android大作業確實挺難的,斷斷續續半個月到現在還有幾個功能沒有完成(中間又去忙了點其他事),到現在為止最強烈的感受是學習安卓是非常需要經驗的活計,而且資料也不像之前學習的演算法,c++之類的非常詳實(像刷oj一搜poj****全是題解,而且都是正確的)我按照網上的部落

在Service播放音樂

activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi

PHP播放音樂程式碼

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>音樂

關於h5背景音樂的自動播放

code 現象 bin 引導 介紹 src source var tel 音樂的自動播放屬性,這裏也介紹一下: <audio controls="controls" autoplay="autoplay"> <source src="song.ogg"

android webview音樂的暫停與播放

前段時間有這樣一個需求,webview顯示一個帶音樂的網頁,在播放音樂的時候進入第三方軟體暫停播放,返回時繼續播放。後來參考了兩篇文章解決了這個問題。 AudioManager audioManager = (AudioManager) mContext.getSyst

QtQMediaPlayer播放音樂及問題

環境:VS2015+Qt5.9.0程式碼如下: //1.獲取絕對路徑AP //獲取當前exe所在路徑 QString runPath = QCoreApplication::applicationDirPath(); qDebug() << runPath; QS

iOS後臺持續播放音樂 斷後持續播放

-(void)applicationWillResignActive:(UIApplication )application { //開啟後臺處理多媒體事件 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents

Android—在Activity繫結service播放音樂

在Activity中onCreate的方法中建立一個intent物件,表示要繫結到哪個服務中去,然後呼叫 bindService方法繫結MusicService服務(因為我這是在fragment中寫的播放器,所以要用getActivity()方法來獲得Activity,不然的話直接用bindService就行

IOS後臺播放音樂

har highlight 播放器 title ges round eas tro ios IOS後臺播放音樂 博客分類: IOS http://www.apple.com.cn/developer/iphone/library/documentation/

手機影音第十五天,利用service實現後臺播放音樂,在通知欄顯示當前音樂信息等

手機影音 第十五天 利用service實現後臺播放音樂 在通知欄顯示當前音樂信息。 代碼已經托管到碼雲上,有興趣的小夥伴可以下載看看 https://git.oschina.net/joy_yuan/MobilePlayer 先來一張目前的音樂播放器的效果圖,當播

Android使用Service播放音樂

connect stat 生成 bin intent style protected state 最大值 像音樂這種耗時的和適合後臺操作的應當放在Service中進行操作,而不是放在Activity,下面就介紹使用Service的音樂播放器 先創建一個MusicServic

Ubuntu終端命令行播放音樂(mp3)

文件瀏覽器 文件的 命令行 ubuntu exc pla tps 格式 ocp 有很多在終端命令行播放mp3的工具,有的甚至可以生成播放列表。也只有命令行重度使用者有這個需求,下面我們來看一看這些工具。 Sox Sox(Sound eXchange)是操作聲音文件的瑞士軍刀

webview播放視屏,返回或者退出後,仍然會有聲音。

網頁 one nsh 鏈接 codes 聲音 div 獲得 logs 解決辦法: protected void onPause() { super.onPause(); if (Build.VERSION.SDK_INT >= Build.VERS

在Winform播放視頻等【DotNet,C#】

視頻格式 數量 ide () ngs 很多 選擇 有一個 void 在項目中遇到過這樣的問題,就是如何在Winform中播放視頻。當時考察了幾種方式,第一種是直接使用Windows Media Player組件,這種最簡單;第二種是利用DirectX直接在窗體或者控件上繪圖

unity 播放視頻

shader int inpu 包含 assets vid 網絡 拉伸 上下文 Unity視頻播放有很多種實現方式,可根據要求來選擇適當的實現,這裏總結一下: 1. MovieTexture Unity標準接口,支持的播放視頻格式有.mov、.mpg、.mpeg

python寫的定時播放音樂

true ini etime dir post datetime python 時長 分鐘 import datetime import os import time import pygame from pygame import mixer from pygame.l

第二章 LCD液晶顯示屏&聲控裝置&播放音樂&遙控器

sound 下機 當前 default 代碼 pre 顯示器 結構 star 這節我將帶大家了解亮寧機器人編程的基礎部分。 LCD液晶顯示屏 LCD液晶顯示屏是在實現某種功能和調試中不可缺少的部分,接下來我帶大家學習,如何使用LCD液晶顯示屏。 首先我們把LCD液晶顯示屏插

在Linux終端命令行下播放音樂的命令

足夠 mp3 管理 關於 令行 ctrl+alt fmt 終端命令 alt+ 現在的 Linux 桌面已經發展的很好了,在桌面下播放音樂操作起來也很簡單。那麽我們還記得在桌面不是那麽好的時候我們是怎麽播放音樂的麽?哎,我是想不起來了,實在是太難了。不過現在我們可以先安裝一個

如何下載微信文章音樂、歌曲伴奏

點擊下載 鏈接 dex 預報 src 電腦 輸入 com == 只需一步即可 用電腦打開網址 https://www.huyahaha.com/index/mp3 然後輸入微信文章鏈接, 點擊下載就可以了 如何下載微信文章中的音樂、歌曲伴奏