首先,附上程序执行后的效果。例如以下图所看到的:

一.部署一个web项目到tomcatserver上:

1.这个小程序是结合网络来播放一首音乐的,首先,把我们搞好的一个web项目放置在tomcat安装文件夹下的webapps文件夹底下。当中这个web项目名为music,文件夹结构例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

当中我们的音乐放置在例如以下图的文件夹底下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

2.接着我们开启tomcat 7.0server。我安装的tomcat是exe格式的,所以我在计算机—管理——服务和应用程序—服务 下有一个tomcat 7.0的服务,开启后例如以下图所看到的:

注:假设你安装tomcat的格式是以压缩包的格式。能够打开tomcat解压文件夹后的bin文件夹下的startup.bat批处理文件开启这个服务。

3.开启完tomcatserver。此时就把music这个web项目部署到tomcatserver上了,此时就能够開始编写我们的安卓代码了。

二.在我们写安卓代码之前,还须要一个小小的步骤,就是我们安卓要怎样訪问我们部署到tomcatserver上的项目,在web项目中,我们訪问一个网页能够在地址栏输入:http://localhost:8083/music/index.jsp 这样来訪问index.jsp页面,当中localhost也能够改为127.0.0.1,即代表本机,当中8083为一个port号,可是在安卓中訪问一个web项目有一些差别,当中有以下这几个小步骤:

1.首先,必须知道我们自己计算机上的IP地址,我们能够打开cmd命令行窗体。输入命令ipconfig,例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

当中选择你已经连上的网络的IPv4地址,这个IP地址是安卓和web项目进行网络连接所须要的。

2.接着,我们必需要知道我们tomcat服务器上的port号是多少,我的是8083,我们要怎么查看tomcat的port号呢,能够打开tomcat安装文件夹下的conf文件夹下的server.xml文件。看下port号。例如以下图所看到的:

当中假设port号占用的话。能够通过改动server.xml文件来改动port号,即上图中的红色框起来的地方中的port值。

3.此时,在我们安卓中要訪问部署在tomcatserver上的web项目里的文件。能够使用以下的地址:http://192.168.1.1:8083/BBS/index.jsp,这样就能够訪问web项目了,当中192.168.1.1为本机的IP地址。8083为server的port号,当中我们能够直接在浏览器中输入http://192.168.1.1:8083/BBS/index.jsp 訪问这个index.jsp页面。

三.接下来就能够编写安卓代码了:

1.首先,新建一个android项目,打开layout文件夹下的activity_main.xml布局文件,代码例如以下:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <RelativeLayout
  8. android:layout_width="match_parent"
  9. android:layout_height="44dp"
  10. android:background="@drawable/title_bar1" >
  11.  
  12. <ImageView
  13. android:id="@+id/finish"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:onClick="click"
  17. android:src="@drawable/finish1" />
  18.  
  19. <TextView
  20. android:id="@+id/music_name"
  21. android:layout_width="match_parent"
  22. android:layout_height="wrap_content"
  23. android:gravity="center"
  24. android:padding="5dp"
  25. android:text="@string/text"
  26. android:textSize="23sp" />
  27.  
  28. </RelativeLayout>
  29.  
  30. <ImageView
  31. android:layout_width="match_parent"
  32. android:layout_height="wrap_content"
  33. android:layout_gravity="center"
  34. android:layout_weight="1.05"
  35. android:src="@drawable/img2" />
  36.  
  37. <RelativeLayout
  38. android:layout_width="match_parent"
  39. android:layout_height="wrap_content"
  40. android:gravity="center_vertical|center_horizontal" >
  41.  
  42. <Button
  43. android:id="@+id/play"
  44. android:layout_width="wrap_content"
  45. android:layout_height="wrap_content"
  46. android:onClick="click"
  47. android:text="@string/play" />
  48.  
  49. <Button
  50. android:id="@+id/pause"
  51. android:layout_width="wrap_content"
  52. android:layout_height="wrap_content"
  53. android:layout_toRightOf="@id/play"
  54. android:onClick="click"
  55. android:text="@string/pause" />
  56.  
  57. <Button
  58. android:id="@+id/stop"
  59. android:layout_width="wrap_content"
  60. android:layout_height="wrap_content"
  61. android:layout_toRightOf="@id/pause"
  62. android:onClick="click"
  63. android:text="@string/stop" />
  64. </RelativeLayout>
  65.  
  66. </LinearLayout>

当中的一个id为finish的ImageView(图片视图)和底下的三个Button(button)都有一个android:onClick属性,都为click,所以在MainActivity类就要写一个click()方法,这种方法为ImageView和Button点击时触发的方法,这样就能够降低代码量,不用使用findViewById和设置事件监听了。

2.当中activity_main.xml布局文件所需的文字我都放在strings.xml文件中,代码例如以下:

  1. <?xml version="1.0" encoding="utf-8"?
  2.  
  3. >
  4. <resources>
  5.  
  6. <string name="app_name">通过网络播放音乐</string>
  7. <string name="hello_world">Hello world!</string>
  8. <string name="menu_settings">Settings</string>
  9. <string name="text">金海心—那么骄傲</string>
  10. <string name="play">播放</string>
  11. <string name="pause">暂停</string>
  12. <string name="stop">停止</string>
  13. <string name="exit">退出</string>
  14. </resources>

3.接着附上MainActivity.java文件的代码。代码例如以下:

  1. package com.example.android_intent_playmusic;
  2.  
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.view.KeyEvent;
  7. import android.view.View;
  8.  
  9. public class MainActivity extends Activity {
  10.  
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. }
  16.  
  17. public void click(View v){
  18. Intent intent = new Intent(MainActivity.this, MusicService.class);//实例化一个Intent对象
  19. int op = -1;//设置中间变量op
  20. switch (v.getId()) {
  21. case R.id.play://当点击的为播放button时
  22. op = 1;
  23. break;
  24. case R.id.pause://当点击暂停button时
  25. op = 2;
  26. break;
  27. case R.id.stop://当点击停止button时
  28. op = 3;
  29. break;
  30. case R.id.finish://当点击返回图片button
  31. finish();//返回上一个界面
  32. break;
  33. default:
  34. break;
  35. }
  36.  
  37. Bundle bundle = new Bundle();//实例化一个Bundle对象
  38. bundle.putInt("msg", op);//把op的值放入到bundle对象中
  39. intent.putExtras(bundle);//再把bundle对象放入intent对象中
  40. startService(intent);//开启这个服务
  41. }
  42. }

当中的click()方法里的switch case语句来推断点击的是哪个button,并通过op这个中间变量传递给MusicService服务类,在MainActivity中开启MusicService这个服务。

4. 接下来附上MusicService这个服务类,这个类继承了Service类。代码例如以下:

  1. package com.example.android_intent_playmusic;
  2.  
  3. import java.io.IOException;
  4.  
  5. import android.app.Service;
  6. import android.content.Intent;
  7. import android.media.MediaPlayer;
  8. import android.net.Uri;
  9. import android.os.Bundle;
  10. import android.os.IBinder;
  11.  
  12. public class MusicService extends Service {
  13.  
  14. private MediaPlayer player;//声明一个MediaPlayer对象
  15.  
  16. @Override
  17. public IBinder onBind(Intent arg0) {
  18. // TODO 自己主动生成的方法存根
  19. return null;
  20. }
  21.  
  22. //创建服务
  23. @Override
  24. public void onCreate() {
  25. // 当player对象为空时
  26. if (player == null) {
  27. player = MediaPlayer.create(MusicService.this, Uri
  28. .parse("http://192.168.1.110:8083/music/music/music2.mp3"));//实例化对象,通过播放本机server上的一首音乐
  29. player.setLooping(false);//设置不循环播放
  30. }
  31. super.onCreate();
  32. }
  33.  
  34. //销毁服务
  35. @Override
  36. public void onDestroy() {
  37. //当对象不为空时
  38. if (player != null) {
  39. player.stop();//停止播放
  40. player.release();//释放资源
  41. player = null;//把player对象设置为null
  42. }
  43. super.onDestroy();
  44. }
  45.  
  46. //開始服务
  47. @Override
  48. public int onStartCommand(Intent intent, int flags, int startId) {
  49. // TODO 自己主动生成的方法存根
  50. Bundle b = intent.getExtras();//获取到从MainActivity类中传递过来的Bundle对象
  51. int op = b.getInt("msg");//再获取到MainActivity类中op的值
  52. switch (op) {
  53. case 1://当op为1时。即点击播放button时
  54. play();//调用play()方法
  55. break;
  56. case 2://当op为2时,即点击暂停button时
  57. pause();//调用pause()方法
  58. break;
  59. case 3://当op为3时。即点击停止button时
  60. stop();//调用stop()方法
  61. break;
  62. default:
  63. break;
  64. }
  65. return super.onStartCommand(intent, flags, startId);
  66. }
  67.  
  68. //停止播放音乐方法
  69. private void stop() {
  70. // 当player对象不为空时
  71. if (player != null) {
  72. player.seekTo(0);//设置从头開始
  73. player.stop();//停止播放
  74. try {
  75. player.prepare();//预载入音乐
  76. } catch (IllegalStateException e) {
  77. // TODO 自己主动生成的 catch 块
  78. e.printStackTrace();
  79. } catch (IOException e) {
  80. // TODO 自己主动生成的 catch 块
  81. e.printStackTrace();
  82. }
  83. }
  84. }
  85.  
  86. //暂停播放音乐方法
  87. private void pause() {
  88. // 当player对象正在播放时而且player对象不为空时
  89. if (player.isPlaying() && player != null) {
  90. player.pause();//暂停播放音乐
  91. }
  92. }
  93.  
  94. //播放音乐方法
  95. private void play() {
  96. // 当player对象不为空而且player不是正在播放时
  97. if (player != null && !player.isPlaying()) {
  98. player.start();//開始播放音乐
  99. }
  100. }
  101.  
  102. }
  1. </pre></p><p></p><p>当中通过例如以下代码:<pre class="java" name="code">player = MediaPlayer.create(MusicService.this, Uri.parse("<a target=_blank href="http://192.168.1.115:8083/music/music/music2.mp3">http://192.168.1.115:8083/music/music/music2.mp3</a>"));

这样就能够訪问部署在tomcatserver上的music项目底下的mp3文件。

5.最后,不要忘了两件事。第一,我们必需要将MusicService类在AndroidManifest.xml文件中声明这个service。

第二。由于我们是通过网络来訪问本机server中的web项目,所以我们必需要在AndroidManifest.xml文件中指定一个同意訪问网络资源的权限。

(1).声明service。放在<application></application>标记下,代码例如以下:

  1. <service android:name=".MusicService"></service>

(2).此程序须要訪问网络资源,所以须要在AndroidManifest.xml文件指定同意訪问网络资源的权限,详细代码例如以下:

  1. <uses-permission android:name="android.permission.INTERNET"/>

四.执行此android项目,效果如上面的效果图。点击播放button,開始播放音乐。点击暂停button,暂停播放,再次点击播放button,继续播放。点击停止button。停止播放。再次点击播放button。从头開始播放;点击上面的返回图片。返回到上一个页面。

当中,上述代码中没有关闭服务。假设想要停止服务的话,能够调用stopService(intent)这种方法,当中intent指的是在MainActivity类中实例化的Intent对象。

上述代码下载地址:源代码下载

五.以上内容仅供大家学习參考。写得不好。请见谅,如有错误,请指出。谢谢!



Android之通过网络播放一首简单的音乐的更多相关文章

  1. Android开发学习之路--MediaPlayer之简单音乐播放器初体验

    很多时候我们都会用手机来播放音乐,播放视频,那么具体地要怎么实现呢,其实主要是MediaPlayer类来完成的.下面通过简单的例子来实现一首歌曲的播放吧.新建工程MediaPlayerStudy,这里 ...

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

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

  3. Android Service AIDL 远程调用服务 【简单音乐播放实例】

    Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借助AIDL来完成 ...

  4. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  5. Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. Android ListView从网络获取图片及文字显示

    上一篇文章说的是ListView展示本地的图片以及文本,这一篇说一下如何从网络获取图片以及文本来显示.事实上,一般是先获取Josn或sml数据,然后解释显示.我们先从网上获取xml,然后对其进行解析, ...

  7. Android直播实现 Android端推流、播放

    最近想实现一个Android直播,但是对于这方面的资料都比较零碎,一开始是打算用ffmpeg来实现编码推流,在搜集资料期间,找到了几个强大的开源库,直接避免了jni的代码,集成后只用少量的java代码 ...

  8. nginx android app 慢网络请求超时

    最近遇到了android 在慢网络下面请求服务器报 java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by ...

  9. 5、android ConnectivityManager获取网络状态

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...

随机推荐

  1. C# linq对分组操作执行子查询

    本主题演示创建查询的两种不同方式,此查询将源数据排序成组,然后分别对每个组执行子查询. 每个示例中的基本方法是使用名为 newGroup 的"接续块"对源元素进行分组,然后针对 n ...

  2. AngularJS学习篇(二十二)

    AngularJS 依赖注入 什么是依赖注入 wiki 上的解释是:依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或 ...

  3. phonegap与H5中的接口对比

    接口 HTML5 phonegap 差异 地理定位 geolocation 单次定位: navigator.geolocation.getCurrentPosition(Success, [error ...

  4. 快速学会使用Fiddler抓包 截包伪造提交包

    1.Fiddler介绍 Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑,移动设备和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的 ...

  5. Xcode修改个性化注释

    1.首先找到Xcode进入包内容 2.依次进入/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Develo ...

  6. [译]ASP.NET Core 2.0 区域

    问题 如何将一个规模庞大的ASP.NET Core 2.0应用程序进行逻辑分组? 答案 新建一个ASP.NET Core 2.0空项目,修改Startup类,增加Mvc服务和中间件: public v ...

  7. Lombok 使用小结

    Lombok 简介 Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注释实现这一目的.通过在开发环境中实现 Lo ...

  8. Python函数篇:装饰器

    装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理. ...

  9. 14.javaweb AJAX技术详解

    一.简介 1,  ajax:在不重新加载网页的前提下,与服务器交换数据并更新部分网页的技巧,但其本身并不是一种新技术 2,  核心:XMLHttpRequest对象.AJAX技术主要是通过此对象完成的 ...

  10. C语言实现快速排序法(分治法)

    title: 快速排序法(quick sort) tags: 分治法(divide and conquer method) grammar_cjkRuby: true --- 算法原理 分治法的基本思 ...