Android之通過網路播放一首簡單的音樂
首先,附上程式運行後的效果,如所示:
一.部署一個web項目到tomcat伺服器上:
1.這個小程式是結合網路來播放一首音樂的,首先,把我們搞好的一個web項目放置在tomcat安裝目錄下的webapps目錄底下,其中這個web項目名為music,目錄結構如下:
其中我們的音樂放置在如的目錄底下:
2.接著我們開啟tomcat 7.0伺服器,我安裝的tomcat是exe格式的,所以我在電腦—管理——服務和應用程式—服務 下有一個tomcat 7.0的服務,開啟後如所示:
註:如果你安裝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,如所示:
其中選擇你已經連上的網路的IPv4地址,這個IP地址是安卓和web項目進行網路連接所需要的。
2.接著,我們必須要知道我們tomcat伺服器上的連接埠號碼是多少,我的是8083,我們要怎麼查看tomcat的連接埠號碼呢,可以開啟tomcat安裝目錄下的conf目錄下的server.xml檔案,看下連接埠號碼,如所示:
其中如果連接埠號碼佔用的話,可以通過修改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 {@Overrideprotected 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;//設定中間變數opswitch (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對象@Overridepublic IBinder onBind(Intent arg0) {// TODO 自動產生的方法存根return null;}//建立服務@Overridepublic 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();}//銷毀服務@Overridepublic void onDestroy() {//當對象不為空白時if (player != null) {player.stop();//停止播放player.release();//釋放資源player = null;//把player對象設定為null}super.onDestroy();}//開始服務@Overridepublic 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對象。