开发记录(游戏开黑)

来源:互联网 发布:个人理财软件 编辑:程序博客网 时间:2024/05/14 14:17



实现核心组件:

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广播接收器 ,监听广播后执行刷新 成员列表




0 0
原创粉丝点击