【安卓】实验7 BindService模拟通信

实验报告


课程名称


基于Android平台移动互联网开发


实验日期


2016.4.30


实验项目名称


实验7 BindService模拟通信


实验地点


S30010


实验类型


□验证型    √设计型    □综合型


学  时


2学时


一、实验目的及要求(本实验所涉及并要求掌握的知识点)


目的:实现启动端和BindService之间的双向通信

要求:1.实现从启动端传递一个数据至BindService端;

2.实现使用BindService服务播放项目源文件中的音乐;

3.实现在启动端通过“增加”和“降低”两个按钮控制音频音量大小。

4.实现在启动端通过“暂停”按钮控制音频暂停播放。


二、实验环境(本实验所使用的硬件设备和相关软件)


(1)PC机

(2)操作系统:Windows XP

(3)软件: Eclipse, JDK1.6,Android SDK,ADT


三、实验内容及步骤


1.在MusicAndVideoPlay中添加一个通过绑定事件播放音乐的按钮和一个设置音乐的菜单选项.

2.创建一个BindService

3.创建一个SettingMusic


四、实验结果(本实验源程序清单及运行结果或实验结论、实验设计图)


代码:

MusicAndVideoPlay.java

public class MusicAndVideoPlay extends Activity {

private Button playSourceMusicbt, playLocalMusicbt, playMusicOnbangding,stopPlaybt,

playVideobt, exitPlaybt;

private MediaPlayer myPlayer1 = new MediaPlayer();

private VideoView video;

/*private ReceiverVolum receiverVolum;*/

static BindService.MyBinder binder;

private ServiceConnection conn=new ServiceConnection() {

@Override

public void onServiceDisconnected(ComponentName arg0) {

// TODO Auto-generated method stub

System.out.println("Service is disconnected");

}

@Override

public void onServiceConnected(ComponentName arg0, IBinder arg1) {

// TODO Auto-generated method stub

System.out.println("Service Connected");

binder=(BindService.MyBinder) arg1;

//创建连接获取IBinder

}

};

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.musicandvideo_layout);

playSourceMusicbt = (Button) findViewById(R.id.playSourceMusic);

playLocalMusicbt = (Button) findViewById(R.id.playLocalMusic);

playMusicOnbangding= (Button) findViewById(R.id.playMusicOnbangding);

stopPlaybt = (Button) findViewById(R.id.stopPlay);

playVideobt = (Button) findViewById(R.id.playVideo);

exitPlaybt = (Button) findViewById(R.id.exitPlay);

video=(VideoView) findViewById(R.id.video);

playSourceMusicbt.setOnClickListener(new MyClickListener());

playLocalMusicbt.setOnClickListener(new MyClickListener());

playMusicOnbangding.setOnClickListener(new MyClickListener());

stopPlaybt.setOnClickListener(new MyClickListener());

playVideobt.setOnClickListener(new MyClickListener());

exitPlaybt.setOnClickListener(new MyClickListener());

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// TODO Auto-generated method stub

//     MenuInflater inflater=new MenuInflater(this);

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// TODO Auto-generated method stub

Intent intent;

switch (item.getItemId()) {

case R.id.musicSetting:

Toast.makeText(MusicAndVideoPlay.this, "Service 的音乐声音值为:"+binder.getCurrentSount(), Toast.LENGTH_LONG).show();

Bundle bundle = new Bundle();

bundle.putInt("currentSount", binder.getCurrentSount());

//创建启动MainActivity的Intent

intent=new Intent(this,SettingMusic.class);

intent.putExtras(bundle);

//添加额外的Flag,将Activity栈中处于MainActivity之上的Activity弹出

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);

break;

default:

break;

}

return super.onOptionsItemSelected(item);

}

class MyClickListener implements OnClickListener {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.playSourceMusic:

startService(new Intent(MusicAndVideoPlay.this, MusicService.class));

break;

case R.id.playLocalMusic:

try

{

if(myPlayer1.isPlaying()==true)

{

/*把 MediaPlayer重设*/

myPlayer1.reset();

}

/*设定 MediaPlayer读取SDcard的档案*/

myPlayer1.setDataSource(Environment.getExternalStorageDirectory().getPath()+"/nan.mp3");

myPlayer1.prepare();

/*把 MediaPlayer开始播放*/

myPlayer1.start();

}catch (Exception e) {

// TODO: handle exception

}

break;

case R.id.playMusicOnbangding:

//绑定方式创建Service

final Intent intent=new Intent(MusicAndVideoPlay.this,BindService.class);

bindService(intent, conn, Service.BIND_AUTO_CREATE);

break;

case R.id.stopPlay:

if(myPlayer1.isPlaying()==true)

{

/*把 MediaPlayer重设*/

myPlayer1.stop();

}

break;

case R.id.playVideo:

File file=new File(Environment.getExternalStorageDirectory().getPath()+"/wat.avi");

MediaController mc=new MediaController(MusicAndVideoPlay.this);

if(file.exists()){

video.setVideoPath(file.getAbsolutePath());

video.setMediaController(mc);

video.requestFocus();

try{

video.start();

}catch(Exception e){

}

video.setOnCompletionListener(new OnCompletionListener() {

@Override

public void onCompletion(MediaPlayer arg0) {

// TODO Auto-generated method stub

Toast.makeText(MusicAndVideoPlay.this, "视频播放完毕!", Toast.LENGTH_SHORT).show();

}

});

}else{

Toast.makeText(MusicAndVideoPlay.this, "要播放的视频文件不存在", Toast.LENGTH_SHORT).show();

}

break;

case R.id.exitPlay:

break;

default:

break;

}

}

}

public BindService.MyBinder getBinder() {

return binder;

}

public void setBinder(BindService.MyBinder binder) {

this.binder = binder;

}

}

BindService.java

public class BindService extends Service {

//系统使用MediaPlayer播放音乐,定义对象mp

private MediaPlayer mp;

private String TAG="Main";

//音量控制,初始化定义

private AudioManager mAudioManager ;

private MyBinder binder=new MyBinder();

public class MyBinder extends Binder{

public int  getCurrentSount(){

return mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

}

public void setCurrentSount(int v){

mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, v, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);

}

}

@Override

public IBinder onBind(Intent intent) {

// TODO Auto-generated method stub

System.out.println("Service is Binded");

return binder;

}

@Override

public void onCreate() {

super.onCreate();

//初始化MediaPlayer对象,准备播放音乐,音乐文件放在文件夹/res/raw中

mp=MediaPlayer.create(this,R.raw.nan);

Log.i(TAG, "MusicService onCreate被运行");

//开始播放音乐

mp.start();

mAudioManager= (AudioManager)getSystemService(Context.AUDIO_SERVICE);

Log.i(TAG, "MusicService onStartCommand被运行");

}

@Override

public void onDestroy() {

super.onDestroy();

//停止播放音乐

mp.stop();

Log.i(TAG, "MusicService onDestroy被运行");

}

}

SettingMusic.java

public class SettingMusic extends Activity {

private SeekBar sBar;

private AudioManager audioManager;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_setting_music);

sBar=(SeekBar) findViewById(R.id.seekBar1);

sBar.setProgress(getIntent().getExtras().getInt("currentSount"));

Log.i("shezhimu", "shezhimu");

audioManager=(AudioManager) getSystemService(Context.AUDIO_SERVICE);

sBar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));

sBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

@Override

public void onStopTrackingTouch(SeekBar arg0) {

// TODO Auto-generated method stub

MusicAndVideoPlay.binder.setCurrentSount(arg0.getProgress());

Toast.makeText(SettingMusic.this, "Service 的音乐声音被设置为:"+arg0.getProgress(), Toast.LENGTH_LONG).show();

}

@Override

public void onStartTrackingTouch(SeekBar arg0) {

// TODO Auto-generated method stub

}

@Override

public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {

// TODO Auto-generated method stub

}

});

}

}

运行结果:(截图)


五、实验总结(对本实验结果进行分析,实验心得体会及改进意见)


刚开始不是很懂如何通过绑定传递数据,后来自己在网上查阅了资料之后就懂了,才能把老师上课做出的部分功能实现.在最后一步通过移动滚动条来改变音乐的大小这个功能,我利用了静态变量来实现了,很有收获.


实验评语


 


实验成绩


 


指导教师签名:              年   月   日

           
时间: 2024-11-03 22:52:34

【安卓】实验7 BindService模拟通信的相关文章

【Android】实验7 BindService模拟通信 截止提交日期2016.5.3

实验7 BindService模拟通信 [目的] 实现启动端和BindService之间的双向通信 [要求] 1)   实现从启动端传递一个数据至BindService端: 2)   实现使用BindService服务播放项目源文件中的音乐: 3)   实现在启动端通过“增加”和“降低”两个按钮控制音频音量大小. 4)   实现在启动端通过“暂停”按钮控制音频暂停播放. [原理] 参考教案,理解BindService和启动端的通信原理 AudioManager的理解 AudioManager类位

实验7 BindService 模拟通信

课程名称 基于Android平台移动互联网开发 实验日期 2016-5-2 实验项目名称 BindService模拟通信 实验地点 S3010 实验类型 □验证型    √设计型    □综合型 学  时 一.实验目的及要求(本实验所涉及并要求掌握的知识点) 1)   实现从启动端传递一个数据至BindService端: 2)   实现使用BindService服务播放项目源文件中的音乐: 3)   实现在启动端通过“增加”和“降低”两个按钮控制音频音量大小. 4)   实现在启动端通过“暂停”

实验七 BindService模拟通信

实验报告 课程名称 基于Android平台移动互联网开发 实验日期 2016年4月22日 实验项目名称 BindService模拟通信 实验地点 S30010 实验类型 □验证型    √设计型    □综合型 学  时 2 一.实验目的及要求(本实验所涉及并要求掌握的知识点) 1. 实现启动端和BindService之间的双向通信: 2. 实现从启动端传递一个数据至BindService端: 3. 实现使用BindService服务播放项目源文件中的音乐: 4. 实现在启动端通过“增加”和“降

实验7 BindService模拟通信

[目的] 实现启动端和BindService之间的双向通信 [要求] 1) 实现从启动端传递一个数据至BindService端: 2) 实现使用BindService服务播放项目源文件中的音乐: 3) 实现在启动端通过“增加”和“降低”两个按钮控制音频音量大小. 4) 实现在启动端通过“暂停”按钮控制音频暂停播放. [实验环境] 1)PC机 2)操作系统:Windows XP 3)软件: Eclipse, JDK1.6,Android SDK,ADT [实验内容及步骤] 1)设计好音乐设置的xm

安卓实验四—碎片的使用

实验四 碎片使用 实验目的及要求: (1)     掌握:碎片的创建 (2)     理解:限定符概念 (3)     掌握:碎片使用 实验内容: 1. 打开实验三项目 2. 创建一个横屏界面 方法:在layout目录旁再创建一个同级别的layout-land目录,将activity_list.xml布局文件复制到layout-land中即可 3. 新增一个碎片DetailFragment,将新闻详情制作成碎片 4. 修改新闻详情的布局,将其中的控件用DetailFragment替换 5. 修改

实验7

实验报告 课程名称 基于Android平台移动互联网开发 实验日期 2016年4月22日 实验项目名称 BindService模拟通信 实验地点 S30010 实验类型 □验证型    √设计型    □综合型 学  时 2 一.实验目的及要求(本实验所涉及并要求掌握的知识点) 1.目的:实现启动端和BindService之间的双向通信 2.要求:实现从启动端传递一个数据至BindService端: 实现使用BindService服务播放项目源文件中的音乐: 实现在启动端通过“增加”和“降低”两

学习进度第十二周

  第十二周 所花时间(包括上课) 11h(4h上课,7课下) 代码量(行) 220 博客量(篇) 1 了解到的知识点 这个星期主要进行了安卓实验和大作业的编写,从中学到了利用安卓SQLite 数据库 进行表的存储以及应用,按照教程成功编写了一个特别小的视频播放器,学会了进度 条等控件的使用.

第一冲刺阶段工作总结02

1.昨天: 安卓实验开发环境有了一定的小问题,又重新进行了配置和学习了有关UI界面设计的知识. 2.今天: 学习UI界面设计,可以自己动手做一个简单程序的UI界面,完成界面设计的第一阶段. 3.遇到的困难: 还是安卓实验开发环境的问题,自己有弄了很长时间,最终能够可以正常运行了.对UI布局有了初步的认识,但是简单的学习还是远远不够的,希望还可以深入的学习.

20165317实验四 安卓程序开发

实验四 安卓程序开发 提交点一 任务: Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECANDROID,安装 Android Stuidio 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号,自己学号前后一名同学的学号,提交代