實驗7 BindService模擬通訊java
【目的】android
實現啓動端和BindService之間的雙向通訊ide
【要求】佈局
1) 實現從啓動端傳遞一個數據至BindService端;學習
2) 實現使用BindService服務播放項目源文件中的音樂;this
3) 實如今啓動端經過「增長」和「下降」兩個按鈕控制音頻音量大小。spa
4) 實如今啓動端經過「暫停」按鈕控制音頻暫停播放。操作系統
【實驗環境】設計
1)PC機code
2)操做系統:Windows XP
3)軟件: Eclipse, JDK1.6,Android SDK,ADT
【實驗內容及步驟】
1)設計好音樂設置的xml佈局文件,在原有的Sudoku項目中的layout中添加一個musicsetting.xml文件
2)使程序登陸後播放音樂
3)在音樂設計裏面控制音樂的音量大小
【實驗代碼】
MainActivity.java部分代碼:
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;
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" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="音量" /> <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>
MusicSetting.java代碼:
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(); }
【運行結果截圖】
【總結】
此次實驗要求實現啓動端和BindService之間的雙向通訊,可是感受此次實驗比較難,不懂怎麼實現,經過網上搜索,詢問同窗勉強完成了一部分實驗,往後還須要更加認真努力的學習。