• 【安卓】实验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

                 

              }

           });

          

          

       }

    }

    运行结果:(截图)

     

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

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

    实验评语

     

    实验成绩

     

    指导教师签名:              年   月   日

               
  • 相关阅读:
    ssh框架构建项目详解--基本概念和struts2
    maven 工程启动找不到 Spring ContextLoaderListener 的解决办法
    ssh(struts,spring,hibernate)开发的初步集成02--xml文件配置
    ssh(struts,spring,hibernate)开发的初步集成01--依赖
    Maven--01(概念)
    hibernate入门知识-03-对象关系映射
    [LeetCode]Construct Binary Tree from Preorder and Inorder Traversal
    [LeetCode]Plus One
    [LeetCode]Triangle
    [LeetCode]PASCAL Triangle系列
  • 原文地址:https://www.cnblogs.com/jieru/p/5453582.html
Copyright © 2020-2023  润新知