編輯:關於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 { @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對象。
本文將介紹運動傳感器(Motion Sensors)、位置傳感器(Position Sensors)、環境傳感器(Environment Sensors)。如需訪問官方原
前些日子,組裡為了在目前的Android程序裡實現基於ListView子項的動畫效果,希望將最新的RecyclerView引入到程序中,於是我便花了一些時間研究了一下Re
一、簡述 最近項目組打算引入weex,並選定了一個頁面進行試水。頁面很簡單,主要是獲取數據渲染頁面,並可以跳轉到指定的頁面。跟之前使用RN 相比,weex 確實要簡單很
首先來看效果: 一、實現原理在實現過程中,主要考慮整個界面由若干個字母組成的子母線條組成,這樣的話把固定數量的字母封裝成一個字母線條,而每個字母又封裝成一個對象,這樣的話