代码改变世界

实验七 BindService模拟通信

2016-05-03 10:05  33刘梦云  阅读(182)  评论(0编辑  收藏  举报

实验报告

课程名称

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

实验日期

2016年4月22日

实验项目名称

BindService模拟通信

实验地点

S30010

实验类型

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

学  时

2

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

1. 实现启动端和BindService之间的双向通信;

2. 实现从启动端传递一个数据至BindService端;

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

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

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

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

(1)PC机

(2)操作系统:Windows XP

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

三、实验内容及步骤

1.新建一个名为MusicVolumeControl的工程;

2.分别新建两个名为BServiceMusic和MusicSetting的java文件,并在其中写相关代码;

3.新建一个名为musicsetting的xml文件,并将之与MusicSetting.java文件相关联,在其中完善代码;

4.在AndroidManifest.xml中添加一对标签。

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

 

代码:

MainActivity.java中:

public class MainActivity extends Activity {

   private MediaPlayer mediaPlayer=new MediaPlayer();

   private TextView tView;

   private BServiceMusic.MyBinder binder;

   private int musicVolume;

   private Button startBtn,pauseBtn,exitBtn;

   private ServiceConnection connection=new ServiceConnection() {

      @Override

      public void onServiceDisconnected(ComponentName arg0) {

         // TODO Auto-generated method stub

                }

      @Override

      public void onServiceConnected(ComponentName arg0, IBinder arg1) {

         // TODO Auto-generated method stub

         binder=(BServiceMusic.MyBinder)arg1;

      }

   };

   @Override

   protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

      tView=(TextView)findViewById(R.id.textView1);

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

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

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

      Intent intent1=new Intent(MainActivity.this,BServiceMusic.class);

      bindService(intent1, connection, Service.BIND_AUTO_CREATE);

      final Intent intent=getIntent();

      startBtn.setOnClickListener(new OnClickListener() {

         @Override

         public void onClick(View arg0) {

            // TODO Auto-generated method stub

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

            mediaPlayer.start();

         }

      });

      pauseBtn.setOnClickListener(new OnClickListener() {

         @Override

         public void onClick(View arg0) {

            // TODO Auto-generated method stub

            if(mediaPlayer.isPlaying()){

                mediaPlayer.pause();

            }else{

                mediaPlayer.start();

            }

         }

      });

      exitBtn.setOnClickListener(new OnClickListener() {

         @Override

         public void onClick(View arg0) {

            // TODO Auto-generated method stub

            if(mediaPlayer.isPlaying()){

                mediaPlayer.release();

            }

         }

      });

   }

   @Override

   protected void onDestroy() {

      // TODO Auto-generated method stub

      if(mediaPlayer.isPlaying()){

         mediaPlayer.stop();

      }

      mediaPlayer.release();

      super.onDestroy();

   }

      @Override

   public boolean onCreateOptionsMenu(Menu menu) {

      // Inflate the menu; this adds items to the action bar if it is present.

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

      return true;

   }

   @Override

   public boolean onOptionsItemSelected(MenuItem item) {

      // TODO Auto-generated method stub

      switch (item.getItemId()){

      case R.id.item1:

         musicVolume=binder.getVolume();

         Intent intent=new Intent(MainActivity.this,MusicSetting.class);

         Bundle bundle=new Bundle();

         bundle.putInt("musicVolume", musicVolume);

         intent.putExtras(bundle);

         startActivity(intent);

         finish();

         break;

         default:

            break;

      }

      return super.onOptionsItemSelected(item);

   }

}

BServiceMusic.java中:

public class BServiceMusic extends Service{

   private MediaPlayer mediaPlayer;

   private AudioManager audioManager;

   private MyBinder binder=new MyBinder();

   public class MyBinder extends Binder{

      public int getVolume(){

         return audioManager.getStreamVolume(audioManager.STREAM_MUSIC);

      }

   }

   @Override

   public IBinder onBind(Intent arg0) {

      // TODO Auto-generated method stub

      return null;

   }

   @Override

   public void onCreate() {

      // TODO Auto-generated method stub

      super.onCreate();

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

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

      mediaPlayer.start();

   }

}

MusicSetting.java中:

public class MusicSetting extends Activity{

   private ProgressBar musicBar;

   @Override

   protected void onCreate(Bundle savedInstanceState) {

      // TODO Auto-generated method stub

      super.onCreate(savedInstanceState);

      setContentView(R.layout.musicsetting);

      musicBar=(ProgressBar)findViewById(R.id.progressBar1);

      Bundle bundle=new Bundle();

      bundle=getIntent().getExtras();

      musicBar.setProgress(bundle.getInt("musicVolume"));

   }

}

运行结果:(截图)

初始界面:

 

减小音量:

 

增大音量:

 

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

      这个实验不是在数独游戏的基础上完成的,而是重新新建一个工程,再在其中添加代码,实现控制音量变化的目的。实验过程很困难,参考老师代码完成。

实验评语

 

实验成绩

 

指导教师签名:              年   月   日