• 实验七 BindService模拟通信


    实验报告

    课程名称

    基于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"));

       }

    }

    运行结果:(截图)

    初始界面:

     

    减小音量:

     

    增大音量:

     

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

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

    实验评语

     

    实验成绩

     

    指导教师签名:              年   月   日

  • 相关阅读:
    通过web端启动关闭服务器程序以及检测程序运行状态
    Windows 自动监听程序,游戏服务器挂掉以后,自动监听程序将其重启起来
    自动监听程序,如果程序挂了,就重启
    删除log
    封装了一个C++类,当程序意外崩溃的时候可以生成dump文件,以便确定错误原因。
    贝塞尔曲线
    golang sql连接池 超时 数据库自动断开 ->127.0.0.1:3 306: wsarecv: An established connection was aborted by the software in your host machine.
    带控制的抢庄牛牛
    龙虎斗控制
    回归模型与房价预测
  • 原文地址:https://www.cnblogs.com/summer--liumengyun/p/5453973.html
Copyright © 2020-2023  润新知