Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android之通過網絡播放一首簡單的音樂

Android之通過網絡播放一首簡單的音樂

編輯:關於Android編程

首先,附上程序運行後的效果,如下圖所示:

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022314102108.png

 

 

一.部署一個web項目到tomcat服務器上:

1.這個小程序是結合網絡來播放一首音樂的,首先,把我們搞好的一個web項目放置在tomcat安裝目錄下的webapps目錄底下,其中這個web項目名為music,目錄結構如下:

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022314102287.png

其中我們的音樂放置在如下圖的目錄底下:

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022314102308.png

2.接著我們開啟tomcat 7.0服務器,我安裝的tomcat是exe格式的,所以我在計算機—管理——服務和應用程序—服務 下有一個tomcat 7.0的服務,開啟後如下圖所示:

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022314102346.png

注:如果你安裝tomcat的格式是以壓縮包的格式,可以打開tomcat解壓目錄後的bin目錄下的startup.bat批處理文件開啟這個服務。

3.開啟完tomcat服務器,此時就把music這個web項目部署到tomcat服務器上了,此時就可以開始編寫我們的安卓代碼了。

 

 

二.在我們寫安卓代碼之前,還需要一個小小的步驟,就是我們安卓要如何訪問我們部署到tomcat服務器上的項目,在web項目中,我們訪問一個網頁可以在地址欄輸入:http://localhost:8083/music/index.jsp 這樣來訪問index.jsp頁面,其中localhost也可以改為127.0.0.1,即代表本機,其中8083為一個端口號,但是在安卓中訪問一個web項目有一些區別,其中有下面這幾個小步驟:

1.首先,必須知道我們自己計算機上的IP地址,我們可以打開cmd命令行窗口,輸入命令ipconfig,如下圖所示:

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022314102362.png

其中選擇你已經連上的網絡的IPv4地址,這個IP地址是安卓和web項目進行網絡連接所需要的。

2.接著,我們必須要知道我們tomcat服務器上的端口號是多少,我的是8083,我們要怎麼查看tomcat的端口號呢,可以打開tomcat安裝目錄下的conf目錄下的server.xml文件,看下端口號,如下圖所示:

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022314102366.png

其中如果端口號占用的話,可以通過修改server.xml文件來修改端口號,即上圖中的紅色框起來的地方中的port值。

3.此時,在我們安卓中要訪問部署在tomcat服務器上的web項目裡的文件,可以使用下面的地址:http://192.168.1.1:8083/BBS/index.jsp,這樣就可以訪問web項目了,其中192.168.1.1為本機的IP地址,8083為服務器的端口號,其中我們可以直接在浏覽器中輸入http://192.168.1.1:8083/BBS/index.jsp 訪問這個index.jsp頁面。

 

 

三.接下來就可以編寫安卓代碼了:

1.首先,新建一個android項目,打開layout目錄下的activity_main.xml布局文件,代碼如下:




    

其中的一個id為finish的ImageView(圖片視圖)和底下的三個Button(按鈕)都有一個android:onClick屬性,都為click,所以在MainActivity類就要寫一個click()方法,這個方法為ImageView和Button點擊時觸發的方法,這樣就可以減少代碼量,不用使用findViewById和設置事件監聽了。

2.其中activity_main.xml布局文件所需的文字我都放在strings.xml文件裡,代碼如下:




    通過網絡播放音樂
    Hello world!
    Settings
	金海心—那麼驕傲
	播放
	暫停
	停止
	退出

3.接著附上MainActivity.java文件的代碼,代碼如下:

package com.example.android_intent_playmusic;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;

public class MainActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	
	public void click(View v){
		Intent intent = new Intent(MainActivity.this, MusicService.class);//實例化一個Intent對象
		int op = -1;//設置中間變量op
		switch (v.getId()) {
		case R.id.play://當點擊的為播放按鈕時
			op = 1;
			break;
		case R.id.pause://當點擊暫停按鈕時
			op = 2;
			break;
		case R.id.stop://當點擊停止按鈕時
			op = 3;
			break;
		case R.id.finish://當點擊返回圖片按鈕
			finish();//返回上一個界面
			break;
		default:
			break;
		}

		Bundle bundle = new Bundle();//實例化一個Bundle對象
		bundle.putInt(msg, op);//把op的值放入到bundle對象中
		intent.putExtras(bundle);//再把bundle對象放入intent對象中
		startService(intent);//開啟這個服務
	}
}

其中的click()方法裡的switch case語句來判斷點擊的是哪個按鈕,並通過op這個中間變量傳遞給MusicService服務類,在MainActivity中開啟MusicService這個服務。

4. 接下來附上MusicService這個服務類,這個類繼承了Service類,代碼如下:

 

package com.example.android_intent_playmusic;

import java.io.IOException;

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

public class MusicService extends Service {

	private MediaPlayer player;//聲明一個MediaPlayer對象

	@Override
	public IBinder onBind(Intent arg0) {
		// TODO 自動生成的方法存根
		return null;
	}

	//創建服務
	@Override
	public void onCreate() {
		// 當player對象為空時
		if (player == null) {
			player = MediaPlayer.create(MusicService.this, Uri
					.parse(http://192.168.1.110:8083/music/music/music2.mp3));//實例化對象,通過播放本機服務器上的一首音樂
			player.setLooping(false);//設置不循環播放
		}
		super.onCreate();
	}

	//銷毀服務
	@Override
	public void onDestroy() {
		//當對象不為空時
		if (player != null) {
			player.stop();//停止播放
			player.release();//釋放資源
			player = null;//把player對象設置為null
		}
		super.onDestroy();
	}

	//開始服務
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// TODO 自動生成的方法存根
		Bundle b = intent.getExtras();//獲取到從MainActivity類中傳遞過來的Bundle對象
		int op = b.getInt(msg);//再獲取到MainActivity類中op的值
		switch (op) {
		case 1://當op為1時,即點擊播放按鈕時
			play();//調用play()方法
			break;
		case 2://當op為2時,即點擊暫停按鈕時
			pause();//調用pause()方法
			break;
		case 3://當op為3時,即點擊停止按鈕時
			stop();//調用stop()方法
			break;
		default:
			break;
		}
		return super.onStartCommand(intent, flags, startId);
	}

	//停止播放音樂方法
	private void stop() {
		// 當player對象不為空時
		if (player != null) {
			player.seekTo(0);//設置從頭開始
			player.stop();//停止播放
			try {
				player.prepare();//預加載音樂
			} catch (IllegalStateException e) {
				// TODO 自動生成的 catch 塊
				e.printStackTrace();
			} catch (IOException e) {
				// TODO 自動生成的 catch 塊
				e.printStackTrace();
			}
		}
	}

	//暫停播放音樂方法
	private void pause() {
		// 當player對象正在播放時並且player對象不為空時
		if (player.isPlaying() && player != null) {
			player.pause();//暫停播放音樂
		}
	}

	//播放音樂方法
	private void play() {
		// 當player對象不為空並且player不是正在播放時
		if (player != null && !player.isPlaying()) {
			player.start();//開始播放音樂
		}
	}

}

 

其中通過如下代碼:

player = MediaPlayer.create(MusicService.this, Uri.parse(http://192.168.1.115:8083/music/music/music2.mp3));
這樣就可以訪問部署在tomcat服務器上的music項目底下的mp3文件。

 

 

 

 

 

 

5.最後,不要忘了兩件事,第一,我們必須要將MusicService類在AndroidManifest.xml文件裡聲明這個service。第二,因為我們是通過網絡來訪問本機服務器中的web項目,所以我們必須要在AndroidManifest.xml文件裡指定一個允許訪問網絡資源的權限。

(1).聲明service,放在標記下,代碼如下:

(2).此程序需要訪問網絡資源,所以需要在AndroidManifest.xml文件指定允許訪問網絡資源的權限,具體代碼如下:

 

 

四.運行此android項目,效果如上面的效果圖。點擊播放按鈕,開始播放音樂;點擊暫停按鈕,暫停播放,再次點擊播放按鈕,繼續播放;點擊停止按鈕,停止播放,再次點擊播放按鈕,從頭開始播放;點擊上面的返回圖片,返回到上一個頁面。

其中,上述代碼中沒有關閉服務,如果想要停止服務的話,可以調用stopService(intent)這個方法,其中intent指的是在MainActivity類中實例化的Intent對象。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved