• 实验7 BindService模拟通信


    实验报告

    课程名称

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

    实验日期

    2016.4.5

    实验项目名称

    BindService模拟通信

    实验地点

    S3010

    实验类型

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

    学  时

    2

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

    1. 实现启动端和BindService之间的双向通信;
    2. 实现从启动端传递一个数据至BindService端;
    3. 实现使用BindService服务播放项目源文件中的音乐;
    4. 实现在启动端通过“增加”和“降低”两个按钮控制音频音量大小;
    5. 实现在启动端通过“暂停”按钮控制音频暂停播放。

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

    (1)PC机

    (2)操作系统:Windows XP

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

    三、实验内容及步骤

    1. 打开Sudoku项目;
    2. 添加Activity类
    3. 添加以下layout资源文件
    4. 完成设计后,显示界面运行截图

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

    代码:

    1、musicsetting.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical" >
     6 
     7     <TextView
     8         android:id="@+id/textView1"
     9         android:layout_width="wrap_content"
    10         android:layout_height="wrap_content"
    11         android:text="音量" />
    12 
    13     <SeekBar
    14         android:id="@+id/seekBar1"
    15         android:layout_width="match_parent"
    16         android:layout_height="wrap_content" />
    17 
    18     <CheckBox
    19         android:id="@+id/checkBox1"
    20         android:layout_width="wrap_content"
    21         android:layout_height="wrap_content"
    22         android:text="静音" />
    23 
    24     <TextView
    25         android:id="@+id/textView2"
    26         android:layout_width="fill_parent"
    27         android:layout_height="wrap_content"
    28         android:layout_marginTop="180dp"
    29         android:text="" />
    30 
    31 </LinearLayout>

    2、MusicSetting.java

     1 package com.example.sukodu;
     2 
     3 import android.app.Activity;
     4 import android.content.Context;
     5 import android.media.AudioManager;
     6 import android.os.Bundle;
     7 import android.widget.CheckBox;
     8 import android.widget.CompoundButton;
     9 import android.widget.CompoundButton.OnCheckedChangeListener;
    10 import android.widget.SeekBar;
    11 import android.widget.SeekBar.OnSeekBarChangeListener;
    12 import android.widget.TextView;
    13 
    14 public class MusicSetting extends Activity{
    15     private SeekBar musicBar;
    16     public AudioManager audiomg;
    17     private CheckBox ckbox;
    18     private TextView tv2;
    19     private int max,current,maxVolume,currentVolume;
    20     @Override
    21 
    22 protected void onCreate(Bundle savedInstanceState) {
    23     // TODO Auto-generated method stub
    24     super.onCreate(savedInstanceState);
    25     setContentView(R.layout.musicsetting);
    26     musicBar = (SeekBar) findViewById(R.id.seekBar1);
    27     ckbox = (CheckBox) findViewById(R.id.checkBox1);
    28     tv2 = (TextView) findViewById(R.id.textView2);
    29     Bundle bundle=new Bundle();
    30     bundle=getIntent().getExtras();
    31     max = bundle.getInt("max");
    32     current = bundle.getInt("current");
    33     musicBar.setMax(max);
    34     musicBar.setProgress(current);
    35     maxVolume = max;
    36     currentVolume = current;
    37     audiomg = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    38     musicBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    39         
    40         @Override
    41         public void onStopTrackingTouch(SeekBar arg0) {
    42             // TODO 自动生成的方法存根
    43             
    44         }
    45         
    46         @Override
    47         public void onStartTrackingTouch(SeekBar arg0) {
    48             // TODO 自动生成的方法存根
    49             
    50         }
    51         
    52         @Override
    53         public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
    54             // TODO 自动生成的方法存根
    55             if (ckbox.isChecked()) {
    56                 currentVolume = 0;
    57                 musicBar.setProgress(currentVolume);
    58                 audiomg.setStreamVolume(AudioManager.STREAM_MUSIC, arg1, 0);
    59             }else {
    60                 currentVolume = audiomg.getStreamVolume(AudioManager.STREAM_MUSIC);
    61                 musicBar.setProgress(currentVolume);
    62                 audiomg.setStreamVolume(AudioManager.STREAM_MUSIC, arg1, 0);
    63             }
    64             tv2.setText("CurrentSS:"+current+";"+"MaxSS:"+max+";"+"CurrentMS:"+currentVolume+";"+"MaxMS:"+maxVolume);
    65             
    66         }
    67     });
    68     ckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    69         
    70         @Override
    71         public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
    72             // TODO 自动生成的方法存根
    73             currentVolume = 0;
    74             musicBar.setProgress(currentVolume);
    75             tv2.setText("CurrentSS:"+current+";"+"MaxSS:"+max+";"+"CurrentMS:"+currentVolume+";"+"MaxMS:"+maxVolume);
    76             
    77         }
    78     });
    79 }
    80 }

    3、MainActivity.java

      1 package com.example.sukodu;
      2 
      3 import android.app.Activity;
      4 import android.app.Service;
      5 import android.content.ComponentName;
      6 import android.content.Context;
      7 import android.content.Intent;
      8 import android.content.ServiceConnection;
      9 import android.media.AudioManager;
     10 import android.os.Bundle;
     11 import android.os.IBinder;
     12 import android.util.Log;
     13 import android.view.Menu;
     14 import android.view.MenuItem;
     15 import android.view.View;
     16 import android.view.View.OnClickListener;
     17 import android.widget.Button;
     18 import android.widget.TextView;
     19 
     20 public class MainActivity extends Activity {
     21     private Button exitbtn;
     22     private TextView tv1;
     23     private BServiceMusic service;
     24 //    private BServiceMusic.MyBinder binder;
     25     private int maxSS,currentSS,maxMS,currentMS;
     26     private ServiceConnection connection=new ServiceConnection() {
     27         
     28         @Override
     29         public void onServiceDisconnected(ComponentName arg0) {
     30             // TODO Auto-generated method stub
     31             
     32         }
     33         
     34         @Override
     35         public void onServiceConnected(ComponentName arg0, IBinder arg1) {
     36             // TODO Auto-generated method stub
     37 //            binder=(BServiceMusic.MyBinder)arg1;
     38             service = ((BServiceMusic.AudioBinder) arg1).getService();
     39         }
     40     };
     41     @Override
     42     protected void onCreate(Bundle savedInstanceState) {
     43         super.onCreate(savedInstanceState);
     44         setContentView(R.layout.activity_main);
     45         
     46     
     47         Intent intent1=new Intent(MainActivity.this, BServiceMusic.class);
     48         startService(intent1);
     49         bindService(intent1, connection, Service.BIND_AUTO_CREATE);
     50         AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
     51         maxSS = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
     52         currentSS = mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM);
     53         maxMS = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
     54         currentMS = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
     55         tv1.setText("CurrentSS:"+currentSS+";"+"MaxSS:"+maxSS+";"+"CurrentMS:"+currentMS+";"+"MaxMS:"+maxMS);
     56 //        Bundle bundle=new Bundle();
     57         final Intent intent=getIntent();    //获取Intent对象
     58         Bundle bundle=intent.getExtras();    //获取传递的数据包
     59 //        tv1.setText("你的名字是:"+bundle.getString("userName"));
     60       
     61         setContentView(R.layout.activity_main);
     62         exitbtn=(Button)findViewById(R.id.exit_btn);
     63         tv1=(TextView)findViewById(R.id.textView1);
     64         Log.i("test", "333333");
     65         exitbtn.setOnClickListener(new OnClickListener() {
     66             
     67             @Override
     68             public void onClick(View arg0) {
     69                 // TODO Auto-generated method stub
     70                 
     71                 startActivity(intent);
     72                 setResult(0x1717,intent);
     73                 Log.i("test", "444444");
     74 
     75                 finish();
     76             }
     77         });
     78 
     79     }
     80 
     81     @Override
     82     public boolean onCreateOptionsMenu(Menu menu) {
     83         // Inflate the menu; this adds items to the action bar if it is present.
     84         getMenuInflater().inflate(R.menu.main, menu);
     85         return true;
     86     }
     87 @Override
     88 public boolean onOptionsItemSelected(MenuItem item) {
     89     // TODO Auto-generated method stub
     90     
     91     switch (item.getItemId()) {
     92     case R.id.item1:
     93 //        musicVolume=binder.getVolume();
     94         Intent intent=new Intent(MainActivity.this, MusicSetting.class);
     95         Bundle bundle=new Bundle();
     96         bundle.putInt("max", maxMS);
     97         bundle.putInt("current", currentMS);
     98         intent.putExtras(bundle);
     99         startActivity(intent);
    100         finish();
    101         break;
    102 
    103     default:
    104         break;
    105     }
    106     return super.onOptionsItemSelected(item);
    107 }
    108 protected void onDestroy() {
    109     super.onDestroy();
    110     unbindService(connection);
    111 }
    112 }

    运行结果:(截图)

     

     

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

    每当运行程序后点击登录就会崩溃,导致实验结果不成功。也不知道该怎么解决,没办法顺利完成。

    实验评语

     

    实验成绩

     

    指导教师签名:              年   月   日

               
  • 相关阅读:
    Spring AOP 代理创建方式
    VS全局搜索
    uni-app中添加AES加密
    中国菜刀"连接被重置"问题解决
    Windows go get下载包失败问题解决
    搭建vulhub 漏洞环境及安装Docker和docker-compose
    DedeCMS 5.7通用重装漏洞分析
    各就各位,预备,GO!
    ARL资产灯塔系统分组资产导出脚本
    玩《巫师3》需要了解的背景知识
  • 原文地址:https://www.cnblogs.com/zhushengjie/p/5453557.html
Copyright © 2020-2023  润新知