收藏 分销(赏)

安卓Android广播、线程、服务与多媒体开发实验报告.doc

上传人:仙人****88 文档编号:9281537 上传时间:2025-03-19 格式:DOC 页数:10 大小:238.54KB 下载积分:10 金币
下载 相关 举报
安卓Android广播、线程、服务与多媒体开发实验报告.doc_第1页
第1页 / 共10页
安卓Android广播、线程、服务与多媒体开发实验报告.doc_第2页
第2页 / 共10页


点击查看更多>>
资源描述
实 验 报 告 (2013/2014学年 第一学期) 课程名称 软件技术系列课程(Android基础) 实验名称 Android广播、线程、服务与多媒体开发 实验时间 2013 年 12 月 9 日 指导单位 计算机学院、诚迈科技(南京)公司 指导教师 学生姓名 班级学号 学院(系) 计算机学院 专 业 软件工程(计算机软件与服务外包) 成 绩 批阅人 王彦 日期 2013-12-09 实 验 报 告 实验名称 Android广播、线程、服务与多媒体开发 指导教师 实验类型 实验 实验学时 4 实验时间 2013-12-9 一、 实验目的和要求 验证Broadcast的发送与接收 验证多线程间的数据传递 验证Service的使用方法 验证多媒体开发中音频、视频、或图像的采集与播放 编写一个Android小程序要求: 1、使用广播传递数据或信息 2、使用多线程 3、适当应用Service 4、实现至少一种多媒体功能 二、 实验环境(实验设备) PC(Window7)、Eclipse 三、 实验原理及内容 在这个程序中涉及到了Receiver和BroadcastReceiver的结合使用,首先在AndroidManifest.xml中注册Receiver,实现能够在后台播放音乐的功能。 通过CommandReceiver类实现接受前台Activity发送的播放命令的Intent。在CommandReceiver类中,有后台Service注册的接受前台控制命令Intent的Receiver,广播播放状态变化的Intent 代码 public class MusicService extends Service implements Runnable { private MediaPlayer player; private List<Music> lists; public static int _id = 1; // 当前播放位置 public static Boolean isRun = true; public LrcProcess mLrcProcess; public LrcView mLrcView; public static int playing_id = 0; public static Boolean playing = false; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub lists = MusicList.getMusicData(getApplicationContext()); SeekBarBroadcastReceiver receiver = new SeekBarBroadcastReceiver(); IntentFilter filter = new IntentFilter(".karl.seekBar"); this.registerReceiver(receiver, filter); new Thread(this).start(); super.onCreate(); } @Override public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub String play = intent.getStringExtra("play"); _id = intent.getIntExtra("id", 1); if (play.equals("play")) { if (null != player) { player.release(); player = null; } playMusic(_id); } else if (play.equals("pause")) { if (null != player) { player.pause(); } } else if (play.equals("playing")) { if (player != null) { player.start(); } else { playMusic(_id); } } else if (play.equals("replaying")) { } else if (play.equals("first")) { int id = intent.getIntExtra("id", 0); playMusic(id); } else if (play.equals("rewind")) { int id = intent.getIntExtra("id", 0); playMusic(id); } else if (play.equals("forward")) { int id = intent.getIntExtra("id", 0); playMusic(id); } else if (play.equals("last")) { int id = intent.getIntExtra("id", 0); playMusic(id); } } private void playMusic(int id) { // /////////////////////// 初始化歌词配置 /////////////////////// // mLrcProcess = new LrcProcess(); // 读取歌词文件 mLrcProcess.readLRC(lists.get(_id).getUrl()); // 传回处理后的歌词文件 lrcList = mLrcProcess.getLrcContent(); MusicActivity.lrc_view.setSentenceEntities(lrcList); // 切换带动画显示歌词 MusicActivity.lrc_view.setAnimation(AnimationUtils.loadAnimation( MusicService.this, R.anim.alpha_z)); // 启动线程 mHandler.post(mRunnable); // /////////////////////// 初始化歌词配置 /////////////////////// // if (null != player) { player.release(); player = null; } if (id >= lists.size() - 1) { _id = lists.size() - 1; } else if (id <= 0) { _id = 0; } Music m = lists.get(_id); String url = m.getUrl(); Uri myUri = Uri.parse(url); player = new MediaPlayer(); player.reset(); player.setAudioStreamType(AudioManager.STREAM_MUSIC); try { player.setDataSource(getApplicationContext(), myUri); player.prepare(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } player.start(); player.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub // 下一首 if (MusicActivity.isLoop == true) { player.reset(); Intent intent = new Intent("pletion"); sendBroadcast(intent); _id = _id + 1; playMusic(_id); } else { // 单曲播放 player.reset(); Intent intent = new Intent("pletion"); sendBroadcast(intent); playMusic(_id); } } }); player.setOnErrorListener(new OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { // TODO Auto-generated method stub if (null != player) { player.release(); player = null; } Music m = lists.get(_id); String url = m.getUrl(); Uri myUri = Uri.parse(url); player = new MediaPlayer(); player.reset(); player.setAudioStreamType(AudioManager.STREAM_MUSIC); try { player.setDataSource(getApplicationContext(), myUri); player.prepare(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } player.start(); return false; } }); } private class SeekBarBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub int seekBarPosition = intent.getIntExtra("seekBarPosition", 0); // System.out.println("--------"+seekBarPosition); player.seekTo(seekBarPosition * player.getDuration() / 100); player.start(); } } @Override public void run() { // TODO Auto-generated method stub while (isRun) { try { Thread.sleep(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (null != player) { int position = player.getCurrentPosition(); int total = player.getDuration(); Intent intent = new Intent(".karl.progress"); intent.putExtra("position", position); intent.putExtra("total", total); sendBroadcast(intent); } if (null != player) { if (player.isPlaying()) { playing = true; } else { playing = false; } } } } Handler mHandler = new Handler(); // 歌词滚动线程 Runnable mRunnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub MusicActivity.lrc_view.SetIndex(LrcIndex()); MusicActivity.lrc_view.invalidate(); mHandler.postDelayed(mRunnable, 100); } }; // 创建对象 private List<LrcContent> lrcList = new ArrayList<LrcContent>(); // 初始化歌词检索值 private int index = 0; // 初始化歌曲播放时间的变量 private int CurrentTime = 0; // 初始化歌曲总时间的变量 private int CountTime = 0; /** * 歌词同步处理类 */ public int LrcIndex() { if (player.isPlaying()) { // 获得歌曲播放在哪的时间 CurrentTime = player.getCurrentPosition(); // 获得歌曲总时间长度 CountTime = player.getDuration(); } if (CurrentTime < CountTime) { for (int i = 0; i < lrcList.size(); i++) { if (i < lrcList.size() - 1) { if (CurrentTime < lrcList.get(i).getLrc_time() && i == 0) { index = i; } if (CurrentTime > lrcList.get(i).getLrc_time() && CurrentTime < lrcList.get(i + 1).getLrc_time()) { index = i; } } if (i == lrcList.size() - 1 && CurrentTime > lrcList.get(i).getLrc_time()) { index = i; } } } return index; } } 四、 实验小结(包括问题和解决方法、心得体会等) 1.对于sendBroadCast的intent对象,需要设置其actionname; 2.推荐使用显式指明receiver,在配置文件AndroidManifest.xml指明; 3.一个receiver可以接收多个action; 4.每次接收广播都会重新生成一个接收广播的对象,再次调用onReceive; 5.在BroadCast中尽量不要处理太多逻辑问题,建议复杂的逻辑交给Activity或者Service去处理。 通过这次实验,让我对Broadcast、尤其是Service有了更深入的认识,还让我意识到编程方面和知识体系机构方面存在的不足 。总之,这次试验让我Android编程能力有了一定的提高。利用这次试验,也将我们的大作业更加完善。 8
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服