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 @@ <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="14" /> + <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.INTERNET" /> <!-- 监听网络的变化 --> 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"> - <Button - android:id="@+id/btn_chat_voice" - android:layout_width="30dp" - android:layout_height="30dp" - android:layout_marginLeft="6dp" - android:background="@drawable/btn_chat_voice_selector" - android:gravity="center" - android:textColor="@color/base_color_text_black" > - </Button> - <Button android:id="@+id/btn_chat_emo" android:layout_width="30dp" @@ -47,25 +37,6 @@ android:text="@string/longclick_speak" > </Button> - <Button - android:id="@+id/btn_chat_keyboard" - android:layout_width="30dp" - android:layout_height="30dp" - android:visibility="gone" - android:background="@drawable/btn_chat_keyboard_selector" - android:gravity="center" - android:textColor="@color/base_color_text_black" > - </Button> - - <Button - android:id="@+id/btn_chat_send" - android:layout_width="30dp" - android:layout_height="30dp" - android:visibility="gone" - android:layout_marginLeft="@dimen/margin_10" - android:background="@drawable/btn_chat_send_selector" - android:gravity="center" - /> - </LinearLayout> +</LinearLayout> </LinearLayout> \ No newline at end of file