您的位置:首页 > 其它

开发记录(游戏开黑)

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广播接收器 ,监听广播后执行刷新 成员列表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐