码迷,mamicode.com
首页 > 其他好文 > 详细

实验7 BindService模拟通信

时间:2016-05-02 22:57:25      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

实验报告

课程名称

基于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的),需要点一下才能跳回去.

实验评语

 

实验成绩

 

指导教师签名:              年   月   日

           

 

实验7 BindService模拟通信

标签:

原文地址:http://www.cnblogs.com/lijiahui/p/5453227.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!