From 67c0a357c7d00f65b92206eb268491bff1fa26fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=AF=8C?= Date: Sun, 12 Jun 2016 01:44:46 +0800 Subject: [PATCH] add the voice send second --- app/src/main/AndroidManifest.xml | 1 + .../java/cn/bmob/imdemo/ui/LocActivity.java | 123 ++++++++++++++---- .../res/layout/include_chat_bottom_bar.xml | 31 +---- 3 files changed, 100 insertions(+), 55 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1ee23d1..c116533 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ + diff --git a/app/src/main/java/cn/bmob/imdemo/ui/LocActivity.java b/app/src/main/java/cn/bmob/imdemo/ui/LocActivity.java index 2d77fff..895c9a1 100644 --- a/app/src/main/java/cn/bmob/imdemo/ui/LocActivity.java +++ b/app/src/main/java/cn/bmob/imdemo/ui/LocActivity.java @@ -1,7 +1,11 @@ package cn.bmob.imdemo.ui; +import android.content.Context; import android.graphics.Color; +import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.os.Handler; import android.os.Message; import android.os.Bundle; @@ -34,6 +38,8 @@ import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.utils.DistanceUtil; import com.orhanobut.logger.Logger; +import java.io.File; +import java.io.FileInputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; @@ -52,6 +58,7 @@ import cn.bmob.newim.bean.BmobIMAudioMessage; import cn.bmob.newim.bean.BmobIMConversation; import cn.bmob.newim.bean.BmobIMLocationMessage; import cn.bmob.newim.bean.BmobIMMessage; +import cn.bmob.newim.core.BmobDownloadManager; import cn.bmob.newim.core.BmobIMClient; import cn.bmob.newim.core.BmobRecordManager; import cn.bmob.newim.event.MessageEvent; @@ -66,6 +73,10 @@ public class LocActivity extends ParentWithNaviActivity implements ObseverListen public BaiduMap mBaiduMap = null; public LocationClient mLocationClient = null; public BDLocationListener myListener = new MyLocationListener(); + BmobIMAudioMessage audio_msg; + MediaPlayer mediaPlayer = null; + Context mContext; + @Bind(R.id.btn_speak) Button btn_speak; @@ -97,6 +108,8 @@ public class LocActivity extends ParentWithNaviActivity implements ObseverListen SDKInitializer.initialize(getApplicationContext()); mLocationClient.registerLocationListener(myListener); + mContext = getApplicationContext(); + setContentView(R.layout.activity_loc); c = BmobIMConversation.obtain(BmobIMClient.getInstance(), (BmobIMConversation) getBundle().getSerializable("c")); BmobIM.getInstance().addMessageListHandler(this); @@ -313,28 +326,6 @@ public class LocActivity extends ParentWithNaviActivity implements ObseverListen } }; } - @Override - protected void onDestroy() { - super.onDestroy(); - mLocationClient.unRegisterLocationListener( myListener ); - mLocationClient.stop(); - // 当不需要定位图层时关闭定位图层 - mBaiduMap.setMyLocationEnabled(false); - //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 - mMapView.onDestroy(); - } - @Override - protected void onResume() { - super.onResume(); - //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 - mMapView.onResume(); - } - @Override - protected void onPause() { - super.onPause(); - //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 - mMapView.onPause(); - } @Override protected String title() { @@ -527,22 +518,104 @@ public class LocActivity extends ParentWithNaviActivity implements ObseverListen } private void process_recv_msg(MessageEvent event) { - Logger.i( "we are in process recv msg\n"); BmobIMMessage msg =event.getMessage(); + Logger.i( msg.getMsgType() ); + if( msg.getMsgType().equals("location")) { Logger.i( "获取的msg的类型:" + msg.getMsgType() ); BmobIMLocationMessage recv_loc_msg = BmobIMLocationMessage.buildFromDB( msg ); friend_loc = new LatLng(recv_loc_msg.getLatitude(), recv_loc_msg.getLongitude()); refresh_map(); } - else if ( msg.getMsgType().equals("audio")){ - + else if ( msg.getMsgType().equals("sound")){ + audio_msg = BmobIMAudioMessage.buildFromDB(true,msg); + String localPath = BmobDownloadManager.getDownLoadFilePath(audio_msg); + startPlayRecord(localPath, true); } } + public void startPlayRecord(String filePath, boolean isUseSpeaker) { + if (!(new File(filePath).exists())) { + return; + } + Logger.i("start play Record "); + + /*AudioManager audioManager = (AudioManager) mContext + .getSystemService(Context.AUDIO_SERVICE); + mediaPlayer = new MediaPlayer(); + if (isUseSpeaker) { + audioManager.setMode(AudioManager.MODE_NORMAL); + audioManager.setSpeakerphoneOn(true); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING); + } else { + audioManager.setSpeakerphoneOn(false); + audioManager.setMode(AudioManager.MODE_IN_CALL); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); + } + + try { + mediaPlayer.reset(); + // 单独使用此方法会报错播放错误:setDataSourceFD failed.: status=0x80000000 + // mediaPlayer.setDataSource(filePath); + // 因此采用此方式会避免这种错误 + FileInputStream fis = new FileInputStream(new File(filePath)); + //mediaPlayer.setDataSource(fis.getFD()); + mediaPlayer.setDataSource(filePath); + mediaPlayer.prepare(); + mediaPlayer.start(); + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + + @Override + public void onPrepared(MediaPlayer arg0) { + + arg0.start(); + } + }); + mediaPlayer + .setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + + @Override + public void onCompletion(MediaPlayer mp) { + stopPlayRecord(); + } + + }); + } catch (Exception e) { + e.printStackTrace(); + }*/ + } + public void stopPlayRecord() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + } + } class LocationEntity { BDLocation location; long time; } + + @Override + protected void onDestroy() { + super.onDestroy(); + mLocationClient.unRegisterLocationListener( myListener ); + mLocationClient.stop(); + // 当不需要定位图层时关闭定位图层 + mBaiduMap.setMyLocationEnabled(false); + //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 + //mMapView.onDestroy(); + } + @Override + protected void onResume() { + super.onResume(); + //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 + mMapView.onResume(); + } + @Override + protected void onPause() { + super.onPause(); + //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 + mMapView.onPause(); + } + } diff --git a/app/src/main/res/layout/include_chat_bottom_bar.xml b/app/src/main/res/layout/include_chat_bottom_bar.xml index 9d3baf4..18b9ad7 100755 --- a/app/src/main/res/layout/include_chat_bottom_bar.xml +++ b/app/src/main/res/layout/include_chat_bottom_bar.xml @@ -13,16 +13,6 @@ android:gravity="center_vertical" android:orientation="horizontal"> - - - - -