zoukankan      html  css  js  c++  java
  • 实验7 BindService模拟通信

    实验报告

    课程名称

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

    实验日期

    2016年4月22日

    实验项目名称

    BindService模拟通信

    实验地点

    S3010

    实验类型

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

    学  时

    4

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

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

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

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

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

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

     

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

    (1)PC机

    (2)操作系统:Windows XP

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

    三、实验内容及步骤

    1)   导入工程Sodoku

    2)   添加以下的Activity类

    3)   添加以下layout资源文件

    4)   完成设计后,界面运行如下

     

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

    代码:

    BackmusicService.java

    package com.example.sukodu;
    
    import android.app.Service;
    import android.content.Context;
    import android.content.Intent;
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.media.MediaPlayer.OnCompletionListener;
    import android.os.Binder;
    import android.os.IBinder;
    
    public class BackmusicService extends Service {
        MediaPlayer mediaplayer;
        Mybinder binder=new Mybinder();
        AudioManager  audioManager;
        int current;
        boolean isSilent=false;
    public class Mybinder extends Binder{
        public BackmusicService getService(){
            return BackmusicService.this;
        }
    }
        public int getvolum(){
            current =audioManager.getStreamVolume(AudioManager.STREAM_MUSIC );
            return current;
            
        }
    
        public void setsilent(boolean isSilent){
            if(isSilent){
                getvolum();
                audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,0,0);
                
                }else{
                audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,current,0);//tempVolume:音量绝对值
                }
    
        }
        public void setvolum(int setting){
            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,setting,0);
            current=setting;
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return binder;
        }
    
        @Override
        public void onCreate() {
            // TODO Auto-generated method stub
            mediaplayer = MediaPlayer.create(BackmusicService.this,
                    R.raw.nanshannan);
            mediaplayer.start();
             audioManager=(AudioManager) getSystemService(Context.AUDIO_SERVICE);
    
            super.onCreate();        
            mediaplayer.setOnCompletionListener(new OnCompletionListener() {
                
                @Override
                public void onCompletion(MediaPlayer mp) {
                    // TODO Auto-generated method stub
                    mediaplayer.start();
                }
            });
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            // TODO Auto-generated method stub
            mediaplayer.start();
            return super.onStartCommand(intent, flags, startId);
    
        }
    
    
        @Override
        public void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
            if(mediaplayer.isPlaying()){
                mediaplayer.stop();
            }
        }
    
    }

    MusicsetActivity.java

    package com.example.sukodu;
    
    import com.example.sukodu.BackmusicService.Mybinder;
    
    import android.R.string;
    import android.annotation.SuppressLint;
    import android.app.ActionBar;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.CompoundButton;
    import android.widget.CompoundButton.OnCheckedChangeListener;
    import android.widget.SeekBar;
    import android.widget.SeekBar.OnSeekBarChangeListener;
    import android.widget.Toast;
    
    public class MusicsetActivity extends Activity{
        Bundle bd;
        CheckBox btnsilent;
        SeekBar sbar;
        BackmusicService binde;
        double setting;
        @SuppressLint("NewApi") 
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActionBar actionbar=getActionBar();
            actionbar.setDisplayShowHomeEnabled(true);
            actionbar.setDisplayHomeAsUpEnabled(true);
            setContentView(R.layout.musicsetting);
            bd=getIntent().getExtras();
            btnsilent=(CheckBox) findViewById(R.id.mcset_quit);
            int current =bd.getInt("volum");
            sbar=(SeekBar) findViewById(R.id.mcset_seekBar);
            int music=(int) (((double)current/14)*100);
            sbar.setProgress(music);
            binde=((Mybinder) bd.getBinder("backmusic")).getService();
            
            Toast.makeText(this, "current volum:"+String.valueOf(music), Toast.LENGTH_LONG).show();
            sbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
                
                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub
    
                    Toast.makeText(MusicsetActivity.this, "current volum:"+String.valueOf((int)setting), Toast.LENGTH_LONG).show();
                }
                
                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub
                    btnsilent.setChecked(false);
                }
                
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress,
                        boolean fromUser) {
                    // TODO Auto-generated method stub
                    
    
                    setting=(((double)progress/100)*14);
                    binde.setvolum((int)setting);
                }
            });
            btnsilent.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    // TODO Auto-generated method stub
                    binde.setsilent(isChecked);
                }
            });
        }
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // TODO Auto-generated method stub
            switch (item.getItemId()){
                case  android.R.id.home:{
                    finish();
                    break;
                }
            }
            return super.onOptionsItemSelected(item);
        }
    
    
        
    }

    main

        ServiceConnection conn=new ServiceConnection() {
            
            @Override
            public void onServiceDisconnected(ComponentName name) {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                // TODO Auto-generated method stub
                binder=(Mybinder)service;
                bs = binder.getService();
                int volum=bs.getvolum();
    //            Toast.makeText(MainActivity.this, "current volum:"+String.valueOf(volum), Toast.LENGTH_LONG).show();
            }
        };
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bd = getIntent().getExtras();
            Intent itmusic=new Intent();
            itmusic.setClass(MainActivity.this, BackmusicService.class);
            bindService(itmusic, conn, Context.BIND_AUTO_CREATE);

    运行结果:(截图)

     

     

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

        经过本次的实验,对我对service类有了一定的了解,从中懂得了一些安卓界面结构的编写方法,但对于android的具体结构了解还是很表面,日后需要多看,多练编写android程序。

    实验评语

     

    实验成绩

     

    指导教师签名:              年   月   日

               
  • 相关阅读:
    HDU3336 Count the string(kmp
    HDU2087 剪花布条(字符串...半暴力写的?
    HDU4763 Theme Section(kmp
    HDU1251 统计难题(字典树|map
    HDU1305 Immediate Decodability (字典树
    priority_queue member function
    HDU
    洛谷 P3370 【模板】字符串哈希 (set||map||哈希||字典树(mle)
    mysql (master/slave)复制原理及配置
    mysql备份小记
  • 原文地址:https://www.cnblogs.com/cckuang/p/5452987.html
Copyright © 2011-2022 走看看