• 实验7 BindService模拟通信


    实验报告

    课程名称

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

    实验日期

    4月22日

    实验项目名称

    BindService模拟通信

    实验地点

    S3010

    实验类型

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

    学  时

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

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

    1)实现从启动端传递一个数据至BindService端;

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

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

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

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

    (1)PC机

    (2)操作系统:Windows XP

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

    三、实验内容及步骤

    一、设计好音乐设置的xml布局文件

     

    二、使程序登录后播放音乐

    三、在音乐设计里面控制音乐的音量大小

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

    代码:

    MainActivity关键代码:

    private int MmusicVolume;

        private MusicService.MyBinder binder;

        ActionBar actionBar;

        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=(MusicService.MyBinder)arg1;

            }

        };

    Intent intentser=new Intent(MainActivity.this, MusicService.class);

    bindService(intentser, connection, Service.BIND_AUTO_CREATE);//播放音乐

    case R.id.ai2:  //带值跳转

                item.setChecked(true);

                MmusicVolume=binder.getVolume();

                Intent intent=new Intent();

                intent.setClass(MainActivity.this, music_main.class);

                Bundle bundle=new Bundle();

                bundle.putInt("musicB", MmusicVolume);

                intent.putExtras(bundle);

                startActivity(intent);

                break;

    MusicService关键代码:

    MediaPlayer mp=new MediaPlayer();

        private MyBinder binder=new MyBinder();

        public class MyBinder extends Binder{

            public int getVolume()

            {

                return aM.getStreamVolume(aM.STREAM_MUSIC);

               

            }

        }

        public IBinder onBind(Intent arg0) {

            // TODO Auto-generated method stub

            return binder;

        }

        @Override

        public void onCreate() {

            super.onCreate();//初始化MediaPlayer对象,准备播放音乐,音乐文件放在文件夹/res/raw中

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

            String sdCard=Environment.getExternalStorageDirectory().getPath();

            try {

                mp.setDataSource(sdCard+File.separator+"bjmusic.mp3");

            } 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();

            }

            try {

                mp.prepare();

            } catch (IllegalStateException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            } catch (IOException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

            mp.start();

            }

        @Override

        public void onDestroy() {

        super.onDestroy();

        //停止播放音乐

        mp.stop();

            }

    music_main关键代码:

    public class music_main extends Activity{

        private RadioButton openmusic,closemusic;

        private RadioGroup who_group;

        MediaPlayer mediaPlayer=new MediaPlayer();

        private SeekBar MusicseekBar;

        private AudioManager audioManager;

        private int currentvol,maxvol;

        @Override

        protected void onCreate(Bundle savedInstanceState) {

            // TODO Auto-generated method stub

           

            super.onCreate(savedInstanceState);

            setContentView(R.layout.music);

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

            openmusic=(RadioButton)findViewById(R.id.opmusic);

            closemusic=(RadioButton)findViewById(R.id.clomusic);

            who_group=(RadioGroup)findViewById(R.id.musicradioGroup);

            Bundle bundle=new Bundle();

            bundle=getIntent().getExtras();

            MusicseekBar.setProgress(bundle.getInt("musicB"));

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

            maxvol=audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

            MusicseekBar.setMax(maxvol);

            who_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

               

                @SuppressLint("NewApi") @Override

                public void onCheckedChanged(RadioGroup arg0, int arg1) {

                    // TODO Auto-generated method stub

                    Intent intent=new Intent(music_main.this, MusicService.class);

                    if (arg1==R.id.opmusic) {

                       

     

                    }else if(arg1==R.id.clomusic){

                        currentvol=0;

                        MusicseekBar.setProgress(currentvol);

                        //audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);

                    }

                }

            });

            MusicseekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

               

                @Override

                public void onStopTrackingTouch(SeekBar arg0) {

                    // TODO Auto-generated method stub

                }

                @Override

                public void onStartTrackingTouch(SeekBar arg0) {

                    // TODO Auto-generated method stub

                }

                @Override

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

                    // TODO Auto-generated method stub

                    currentvol=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

                    MusicseekBar.setProgress(currentvol);

                    audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, aarg1, 0);

                }

            });

        }

     

    }

    运行结果:(截图)

     

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

        实验做起来有难度,代码也难懂,还有很多细节的地方想实现,但需要一点时间,比如seekbar只有点了开启背景音乐才能滑动,点关闭时不能滑动,还有不知为什么点击关闭背景音乐时seekbar不能跳回到初始0那里(实际已经是0的),需要点一下才能跳回去.

    实验评语

     

    实验成绩

     

    指导教师签名:              年   月   日

               
  • 相关阅读:
    iOS开发多线程篇—GCD介绍
    IOS UI篇—UILabel的文字顶部对齐
    TableView编辑中实现多行删除的2中方法以及注意
    UITableView的新手——层次注意
    UITabBarItem编写的时候出现得图片显示异常,和有一些比较忽略的方法总结
    在ios开发中nil和NUll和Nilde区别————和如何判断连个对象的关系和UISlider不能拖动的问题
    iphone 手机屏幕和UIView和UIWindowde 的主要的区别
    iOS平常注意1
    ios优化复制大文件时,如何使内存运用最少且效率最高
    property在括号中应该怎样写
  • 原文地址:https://www.cnblogs.com/lijiahui/p/5453227.html
Copyright © 2020-2023  润新知