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

    课程名称

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

    实验日期

    2016年5月1日

    实验项目名称

    BindService模拟通信

    实验地点

    S3012

    实验类型

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

    学  时

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

    【目的】

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

    【要求】

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

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

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

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

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

    (1)PC机

    (2)操作系统:Windows XP

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

     

     代码如下:

    1.Volumeset.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 Volumeset extends Activity {
        Bundle bd;
        CheckBox btnsilent;
        SeekBar sbar;
        BackmusicService binde;
        double setting;
    
        @SuppressLint("NewApi")
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.musicsetting);
            bd = getIntent().getExtras();
            btnsilent = (CheckBox) findViewById(R.id.checkBox1);
            int current = bd.getInt("volum");
            sbar = (SeekBar) findViewById(R.id.seekBar1);
            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(Volumeset.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);
        }
    
    }

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

    3.MainActivity.java

    package com.example.sukodu;
    
    import com.example.sukodu.BackmusicService.Mybinder;
    
    import android.annotation.TargetApi;
    import android.app.ActionBar;
    import android.app.Activity;
    import android.app.Service;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.os.Build;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public class MainActivity extends Activity {
        private Button exitbtn, aboutbtn, playbtn, chvolBtn;
        private TextView tv1;
        private Mybinder binder;
        BackmusicService bs;
        Bundle bd;
        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();
            }
        };
    
        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        @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);
            ActionBar actionBar = getActionBar();
            actionBar.show();
            ActionBar actionBar1 = getActionBar();// 获取ActionBar对象
            actionBar1.setDisplayShowHomeEnabled(true);// 显示应用程序图标
            actionBar1.setDisplayHomeAsUpEnabled(true);// 将应用程序图标转变为可点击图标,并添加一个返回箭头。
            tv1 = (TextView) findViewById(R.id.textView1);
            Log.i("test", "333333");
    
            final Intent intent = getIntent(); // 获取Intent对象
            Bundle bundle = intent.getExtras(); // 获取传递的数据包
            tv1.setText("你的名字是:" + bundle.getString("userName"));
            aboutbtn = (Button) findViewById(R.id.about_btn);
            exitbtn = (Button) findViewById(R.id.exit_btn);
            chvolBtn = (Button) findViewById(R.id.VolBtn);
    
            playbtn = (Button) findViewById(R.id.buttonPlayer);
            playbtn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    Intent intent = new Intent();
                    intent.setClass(MainActivity.this, MyPlayer.class);
                    startActivity(intent);
    
                }
            });
            exitbtn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
    
                    // startActivity(intent);
                    setResult(0x1717, intent);
                    Log.i("test", "444444");
    
                    finish();
                }
            });
            aboutbtn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    Intent intent = new Intent();
                    intent.setClass(MainActivity.this, SecondActivity.class);
                    startActivity(intent);
                    // finish();
                }
            });
            chvolBtn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    Intent intent = new Intent();
                    intent.setClass(MainActivity.this, Volumeset.class);
                    startActivity(intent);
                }
            });
        }
    
        public boolean onCreateOptionsMenu(Menu menu) {
            // TODO Auto-generated method stub
            MenuInflater inflater = new MenuInflater(this);
            inflater.inflate(R.menu.main, menu);
            return super.onCreateOptionsMenu(menu);
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // TODO Auto-generated method stub
            switch (item.getItemId()) {
            /*
             * case android.R.id.home: // 创建启动MainActivity的Intent Intent intent =
             * new Intent(this, MainActivity.class); //
             * 添加额外的Flag,将Activity栈中处于MainActivity之上的Activity弹出
             * intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
             * startActivity(intent); break;
             */
            case R.id.help:
                Intent intent1 = new Intent(this, Help.class);
                startActivity(intent1);
                // finish();
                break;
            case R.id.about:
                Intent intent2 = new Intent(this, About.class);
                startActivity(intent2);
                // finish();
                break;
            case R.id.newgame:
                Intent intent3 = new Intent(this, New_Game.class);
                startActivity(intent3);
                // finish();
                break;
            default:
                break;
            }
            return super.onOptionsItemSelected(item);
        }
    
        /*
         * @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO
         * Auto-generated method stub getMenuInflater().inflate(R.menu.main, menu);
         * return true; }
         * 
         * @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO
         * Auto-generated method stub if (item.getItemId()==R.id.set) { Intent
         * intent=new Intent();
         * intent.setClass(MainActivity.this,ShuduSettings.class);
         * startActivity(intent); finish();
         * 
         * } return true; }
         */
    
    }

    4.musicsetting.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <SeekBar
            android:id="@+id/seekBar1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
        <CheckBox
            android:id="@+id/checkBox1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="静音" />
    
    </LinearLayout>

    运行截图:

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

    这次实验难度很大,耗费了蛮多的时间,遇到的问题有很多,service的相关方法太多有点混淆了。

    程序能播放后台音乐,但想调节音量的时候出了点差错,还在改进中。

    代码还需继续改进以及完善。

  • 相关阅读:
    win7台式机上使用airpods
    通达信自定义版面设置
    pthread_cond_wait函数实现
    为什么卸载手机微软必应浏览器
    看电子书的好处
    Web前端学习方法
    用Bing搜索单词的时候按下Ctrl键不放可以持续发音
    怎么制作档案盒标签
    三个按钮指向一个Click事件的错误
    What is .NET
  • 原文地址:https://www.cnblogs.com/iTues/p/5470516.html
Copyright © 2011-2022 走看看