开发记录(游戏开黑)
2017-04-23 17:57
393 查看
实现核心组件:
1.http://gcloud.qq.com/ 游戏语音vioce
2.阿里云push (用于开黑成员加入 退出监听)
开黑语音核心代码
public class VoiceCore { private GCloudVoiceEngine voiceEngine; private boolean Going = true; private Context context; private LoadingDialog startDialog; private static VoiceCore _instance; public ChannelModel channelModel; public static synchronized VoiceCore getInstance(Context context) { if (_instance == null) { _instance = new VoiceCore(context); } return _instance; } private VoiceCore(Context context) { this.context = context; voiceEngine = GCloudVoiceEngine.getInstance(); voiceEngine.init(App.getContext(), (Activity) context); } public void Start(ChannelModel channelModel) { if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO)) { this.channelModel = channelModel; Auth(); } else { //提示用户开户权限音频 String[] perms = {"android.permission.RECORD_AUDIO"}; ActivityCompat.requestPermissions((Activity) context, perms, 1); } } private IGCloudVoiceNotify notify = new IGCloudVoiceNotify() { @Override public void OnJoinRoom(final int code, String s, int i1) { Log.e("code", code + " " + s + " " + i1); startDialog.cancel(); if (code == com.tencent.gcloud.voice.IGCloudVoiceNotify.GCloudVoiceCompleteCode.GV_ON_JOINROOM_SUCC) { Drive.getInstance(context).JoinRoom(channelModel.getId(), new Drive.BooleanListener() { @Override public void CallBack(boolean state) { if (state) { voiceEngine.OpenMic(); voiceEngine.OpenSpeaker(); Intent intent = new Intent(context, FloatWindowService.class); context.startService(intent); Drive.getInstance(context).SaveGangUpHistory(channelModel.getId(), channelModel.getAvatar()); } else { Show.getInstance(context).MsgShowSmall("提示", "进入房间失败01"); Going = false; voiceEngine.QuitRoom(channelModel.getId(), 6000); } } }); } else { Show.getInstance(context).MsgShowSmall("提示", "进入房间失败00"); } } @Override public void OnStatusUpdate(int i, String s, int i1) { } @Override public void OnQuitRoom(int i, String s) { Going = false; // startDialog.cancel(); } @Override public void OnMemberVoice(int[] ints, int i) { Log.e("UserCount", String.valueOf(ints.length) + " " + String.valueOf(i)); } @Override public void OnUploadFile(int i, String s, String s1) { } @Override public void OnDownloadFile(int i, String s, String s1) { } @Override public void OnPlayRecordedFile(int i, String s) { } @Override public void OnApplyMessageKey(int i) { } @Override public void OnSpeechToText(int i, String s, String s1) { } @Override public void OnRecording(String s, int i) { } }; private void Auth() { if (!UserManager.CheckUid(true)) { return; } voiceEngine.SetAppInfo(Config.GCloudID, Config.GCloudKEY, UserManager.GetUid()); voiceEngine.Init(); voiceEngine.SetNotify(notify); voiceEngine.SetMode(GCloudVoiceEngine.Mode.RealTime); startDialog = new LoadingDialog(context).builder(); startDialog.setTitle("正在初始化").show(); Going = true; handler.postDelayed(runnable, 3000); startDialog.setTitle("正在入房间").show(); voiceEngine.JoinTeamRoom(channelModel.getId(), 6000); } private Handler handler = new Handler(); private Runnable runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub //要做的事情 Log.e("voiceCore", "Voide正在监听"); if (Going) { voiceEngine.Poll(); handler.postDelayed(this, 3000); } } }; public void Close(CloseListener listener) { //startDialog.setTitle("正在退出房间").show(); voiceEngine.QuitRoom(channelModel.getId(), 6000); voiceEngine.CloseMic(); voiceEngine.CloseSpeaker(); listener.Back(); } public interface CloseListener { void Back(); } }
开黑成员监听核心代码
MyMessageReceiver.OnChannelUpdateListener(new MyMessageReceiver.ChannelUpdate() { @Override public void CallBack(String content) { ChannelRefrash(); } }); public void ChannelRefrash() { OkHttpUtils.post().url(Config.BaseApi) .addParams("action", "GetChannelUser") .addParams("roomid", VoiceCore.getInstance(context).channelModel.getId()) .build() .execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { } @Override public void onResponse(String response, int id) { Log.e("ChannelRefrash", response); Result result = new Gson().fromJson(response, new TypeToken>() { }.getType()); if (result.code == 1) { userList.clear(); for (int i = 0; i < result.data.size(); i++) { NetBeans.ChannelUser model = result.data.get(i); userList.add(model); } adapter.notifyDataSetChanged(); } else { } } }); }
MyMessageReceiver为阿里云push广播接收器 ,监听广播后执行刷新 成员列表
相关文章推荐
- 使用Unity3D 自主实战开发的赛车游戏实例,关键点记录 (一)之赛车游戏总体介绍
- 使用Unity3D 自主实战开发的赛车游戏实例,关键点记录 (二)之地形场景漫游导览制作
- JAVA游戏编程之三----j2me 手机游戏入门开发--俄罗斯方块_3_增加成绩记录
- Erlang单服游戏开发记录序
- Silverlight 游戏开发记录(2)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第9篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第3篇)
- Qt/C++ 开发Android平台《林中伊人》消球小游戏全记录1——独立游戏设计的伊始
- 临时记录:游戏开发注意
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第17篇上)
- 使用Unity3D 自主实战开发的赛车游戏实例,关键点记录 (四)之道路监测点
- 使用Unity3D 自主实战开发的赛车游戏实例,关键点记录 (五)之实时排名系统
- 我的游戏开发记录----开篇
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第4篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第17篇下)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第15篇)
- 记录几个能提高开发团队思维的团队游戏
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第11篇)
- 游戏开发记录(unity3d)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第8篇)