音乐播放器五_第1页
音乐播放器五_第2页
音乐播放器五_第3页
音乐播放器五_第4页
音乐播放器五_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目简本次实训一次案例的基础上,进一步为音乐器添加两个新功能,分别是歌(AppWidget的网络编程,Asynk异步工具类的使用,以及如何AppWidgetProvider发布一个 实现歌 案例分析与实歌词歌词是现在主流音乐器很常见的功能,通过歌曲名在网络寻找歌词文件,然后到本地,解析歌词并显示。在这里,实现这个功能。JSONJSON(JavaScriptObjectNotation)是一种轻量级的格式。易于人阅读和编了类似于C语言的(包括C,C++,C#,Java,JavaScript,Perl,Python等。这些特性使JSON成为理想的语言。JSONfalse,nullJSON按照最简单的形式,可以用下面这样的JSON表示"名称/值对"(7e-3:4:{(}(“‘名称/值’对”之间使用“,”(逗号)分隔。例子:表示人的一个对象(7e-。,(例子:一组学生(7e-。在JAVA中,可以通过JSONObject类对JSON数据进行操作 k HandlerHandlerUI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精为了简化操作,Android1.5android.os.Asynk,它使创建异步Asynk的优点是编写代码简单,可读性强。缺点是当有多个异步任务的时候并且需要与UI线程交互,就会变的很复杂。在本项目中只需要使用一个异Asynk类是一个很好的选择。 k定义了三种泛型类型:Params、Progress和Result。ParamsHTTP请求的URL。Progress任务执行的百分比Result执行任务最终返回的结果Asynk nBackground(Params…)方法执行比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在线程执行,完成任务的主要工作,通常需要较长的时间。在执行过可以调用onPostExecute(Result)HandlerUI的方式,在这里面可以使用在nBackgroundUIExecute时的接口,当任务执行之前开始调用此方使用 k类,以下是几条必须遵守的准 kUIthreadexecuteUIthread不要手动的调用 onPostExecute(Result)...),每个 点击歌词菜单项,跳转到歌词显示界面歌词要到哪里?如何在过去的项目功能设计中,当歌词开始的时候,MusicService会发送一个带当前为状态的广播。可以接收该广播,在接收到此广播时,调用相关方法实现歌词并显示。歌词要到哪里?如何通过歌曲名来获取歌词。这时,可以获取到一组JSON格式的数据,该数7e-87e-87e-9API可以简单地使用火狐浏览器测试一下这个接口当在浏览器地址栏输入:海阔天空后得到一组JSON格式数据如图7e-10所示:地址可以看出返回的数据中包含多组歌词地址在这里采用JSON把歌词文件保存到本地空间,使用歌曲名.lrc的格式作为文件进行保存7e-117e-11ScrollView组件,实现滚动显示的效果。7e-12 说明:ScrollView滚动视图是指当拥有很多内容,屏幕显示不完时,需要通过7e-137e-137e-147e-1415a7e-17所示。7e-15aLinearLayout组件,一个广播(类,以及音乐属性的相关变量。第33到37行代码,初始化相关组件,并广播。,在图7e-17的第55行到69行代码中定义一个类,来处理接收到状与艺术家名等信息,并在标题栏上显示。图7e-17中的第75行,当销毁当前Activity时解除广播。,在MainActivity.java的onOptionsItemSelected方法中加入歌词菜单项响应事件。7e-19所示。7e-197e-21所示。22a7e-22a图7e-22b的getSongLRCUrl方法中,在第21行定义了歌词的API接1536APIgetHtmlCodeJSON数据,并保str_json变量中。4142str_jsonJSONObjectcount关键字获在图7e-23的第50行到53行中,通过result关键字获取到JSON数组,getJSONObjectJSON对象,getJSONObject0,JSON对象。第53行,通过getString方法与关键字lrc获取到歌词的地址,第59到64行代码定义了getHttpClient方法,用于返回一个设置了超时HttpClient实例。,在图7e-24的第68到99行中,定义了getHtmlCode方法,用于网页源码数据,该方法使用的是GET请求。,在图7e-25中需要在AndroidManifest.xml文件中添加网络权限,这,,在LrcActivity.java文件中创建一个类,命名为AsyncDownLoad,并继承于Asynk类,用于实现歌词异步。重写该类的nBackground,onPreExecute,onPostExecute等三个方法。在nBackground方法中首先解析获取到的JSON数据,得到歌词的地址,然后根据歌词地址歌词。,创建AsyncDownLoad类,并重写nBackground,onPreExecute,onPostExecute7e-26a,7e-26b所示。当接收到附带状态为正在状态的广播时,创建一个Asynkexecute方法,因此,每次下new一个对象。SD编写get_lrc方法,实现判断本地歌词文件是否存在,把歌词到本地,以及7e-30所示。在图7e-30中,第140行代码表示获取程序空间的文件路径列表。146150153154行,通过ConnectivityManagerNetworkinfo实例来获取当AnidroidManifest.xml文件中添加相应权限。如7e-31所示。修改AsyncDownLoad类的onPostExecute方法,当歌词完成时,先把歌词文7e-32所示。修改类StatusChangedReceiver中的代码当接收到MusicService发送的get_lrc7e-33所示。 drawLrcWord(7e-34a7e-34b所 7e-357e-36所示。 get_lrc方法中的修7e-36AsyncDownLoadonPostExecute,最后一步退出歌词界面时,先判断异步线程是否在执行,如果是,首先把,这时候,歌词功能就完成了。最终效果如图7e-示。AppWidget

AppWidget7e-39AppWidget。AppWidget是基于BroadcastReceiver组件机制再开发而来的,为此他首先需要遵循BroadcastReceiver的开发流程进行开发,其次是根据他自身提供的AppWidgetProvider、AppWidgetProvderInfo、AppWidgetMangerAppWidgetAppWidgetAppWidgetProviderXML在AndroidManifest.xml文件中AppWidgetProvider类AppWidget上有上一首/暂停下一首等三个按钮用于控制音乐于显示正在的音乐名,三个ImageButton,用于控制音乐的。7e-407e-xmlwidget_provider.xmlAppWidget的初始7e-427e-43所示。7e-42widget_provider.xml7e-43minWidthAppWidget的最小minWidthminHeight,可以参考下图:注:创建的AppWidget大小是4列2行initialLayout:widgetwidget的更新频率。实际的更新时机不一定是精确的按照这个1小时一次。WidgetProviderClass.java文件,并编写程序框架。WidgetProviderClass类7e-45b所示。7e-在AndroidManifest.xml文件中AppWidgetProvider类。如图7e-46所示7e-com.bin.musicwidget.WidgetProviderClassAppWidgetProviderwidget的添加、删除、更新等操作。widgetwidget的添加、删actionandroid:name="MusicService.ACTION_UPDATE"是自己添加的,为了能<meta-data>AppWidgetProviderInfo-viderdataandroid:resource--指定AppWidgetProviderInfo对应的资源路径。即xml/widget_provider.xml。widget(7e-477e-48所示)AppWidget和程序的交互中,有一个非常重要的对象,它就是RemoteViews因为AppWidget运行的进程和创建的应用不在一个进,。PendingIntent对象:一般的程序中绑定按钮的点击事件是直接在实现了OnClickListener接口的类中完成的。但是因为AppWidget并不在应用的进,所以它不到在应用中设置的onclick代码。而PendingIntent可以解决这个问题把Intent看成,那么PendingIntent就是一封被信封起来的信。这封信在remoteViews.setOnClickPendingIntent()中被“邮寄”AppWidgetAppWidget中的按钮单击时他知道将这封信打开,并执。在本例中,PendingIntentgetActivityActivity,getBroadcast方法用于发送广播。onUpdateTextView组件,上一首/下一首按钮加入事件响应7e-51所示。,调试程序时,很容易发现一个问题,当退出程序时,AppWidget的标题,按钮状态并没有更新。这个问题要怎么解决?知道,当程序退出时,MusicService服务会调用onDestroy方法可以在onDestroy方法中发送停止状态的广播,要求AppWidget更新界面。,7e-52MusicActivity.java中,实现退出程序的三个地方分别做出相应修改。7e-53,7e-54,7e-55所示。7e-

7e-音乐时显示歌曲名艺术家名按钮根据状态切换不同如图7e-56所示。暂停歌曲。如图7e-58所示7e-退出程序时,停止歌曲。如图7e-59所示7e-项目心API文档,或者上设计模式:在Android程序开发中,需要掌握界面与逻辑事务分离的思

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论