안녕하세요. 현재 안드로이드 기기에서 보이스톡 (영상 없음) 기능을 구현하고 있습니다.
아래의 1번 코드 (builder 이용)로 정상 작동함을 확인하였습니다.
그래서 2번코드 (config를 이용)로 작동시키려고 하니 오류가 발생합니다.
뭔가 null오류인데 해결방법을 잘 모르겠습니다.
제가 뭔가 config를 잘못 이해하고 있는것 같습니다.
어떻게 해결해야할까요? 아래에 1,2번 코드와 initRemonCallback 코드 올려놓았습니다.
오류 내용도 제일 아래에 올려놓았습니다. 오류에서 280번째 줄 오류 부분은
remonCall.connect(chId, remonConfig);
이 부분입니다.
1번 코드)
private void setRemonCall() {
remonCall = RemonCall.builder()
.context(VoiceTalkActivity.this)
.serviceId(getResources().getString(R.string.remon_serviceId))
.key(getResources().getString(R.string.remon_serviceKey))
.isVideoCall(false)
.audioType(AudioType.VOICE)
.build();
initRemonCallback();
}
2번 코드)
private void startCall() {
remonCall = new RemonCall();
remonConfig = new com.remotemonster.sdk.Config();
remonConfig.setServiceId(getResources().getString(R.string.remon_serviceId));
remonConfig.setKey(getResources().getString(R.string.remon_serviceKey));
remonConfig.setRestHost(REST_HOST);
remonConfig.setSocketUrl(WSS_HOST);
remonConfig.setVideoCall(false);
remonConfig.setAudioType(AudioType.VOICE);
initRemonCallback();
String chId = mChatRoom.getRoomId().replaceAll("[^a-zA-Z0-9]", "");
if (remonCall != null) {
remonCall.setSpeakerphoneOn(false);
remonCall.connect(chId, remonConfig);
}
}
참고로 initRemonCallback 코드는 아래와 같습니다.
private void initRemonCallback() {
// RemonCall, RemonCast 의 초기화가 완료된 후 호출되는 콜백입니다.
remonCall.onInit(() -> {
runOnUiThread(() -> mStatusTextView.setText(“보이스톡 해요”));
mediaPlayer.start();
});
remonCall.onMessage(msg -> {
});
// 서버 접속 및 채널 생성이 완료된 이후 호출되는 콜백입니다.
remonCall.onConnect((channelId) -> {
// Do something
});
remonCall.onComplete(() -> {
if(mediaPlayer != null){
mediaPlayer.release();
}
if (mWaitingTimer != null) {
mWaitingTimer.cancel();
}
runOnUiThread(() -> mOkLayout.setVisibility(View.GONE));
setCallingTimer();
Map<String, Object> voiceTalkData = new HashMap<>();
voiceTalkData.put(FirebaseHelper.voiceTalkOn, true);
voiceTalkData.put(FirebaseHelper.recentTimestamp, DateUtil.getUnixTimeLong());
FirebaseHelper.db.collection("ChatRoom").document(mChatRoom.getRoomId()).collection("VoiceTalk").document(mChatRoom.getRoomId()).set(voiceTalkData, SetOptions.merge());
});
// 상대방이 연결을 끊거나, close() 호출후 종료가 완료되면 호출됩니다.
remonCall.onClose((closeType) -> {
if(mediaPlayer != null){
mediaPlayer.release();
}
// CloseType.MINE : 자신이 close() 를 호출해 연결을 끊은 경우
// CloseType.OTHER : 상대방이 close() 를 호출해 연결을 끊은 경우
// CloseType.OTHER_UNEXPECTED : 상대방이 끊어져서 연결이 종료된 경우
// CloseType.UNKNOWN : 이유를 알 수 없이 연결이 종료된 경우
// 에러에 의한 종료인지 체크
if (closeType == CloseType.UNKNOWN && latestError != null) {
Toast.makeText(VoiceTalkActivity.this, "네트워크 불안정", Toast.LENGTH_SHORT).show();
}
runOnUiThread(() -> mStatusTextView.setText("보이스톡 종료"));
closeVoiceTalk();
});
remonCall.onError((error) -> {
if(mediaPlayer != null){
mediaPlayer.release();
}
latestError = error;
Log.d("error:", error+"");
});
remonCall.onStat(report -> {
});
}
오류
2020-03-11 13:12:07.736 24246-24246/com.unilab.uniting E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.unilab.uniting, PID: 24246
java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=100, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.unilab.uniting/com.unilab.uniting.activities.chatting.VoiceTalkActivity}: java.lang.NullPointerException: Attempt to invoke virtual method ‘java.lang.Object android.content.Context.getSystemService(java.lang.String)’ on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:4491)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4534)
at android.app.ActivityThread.-wrap20(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1752)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ‘java.lang.Object android.content.Context.getSystemService(java.lang.String)’ on a null object reference
at com.remotemonster.sdk.RemonContext.(RemonContext.java:89)
at com.remotemonster.sdk.Remon.createObjects(Remon.java:99)
at com.remotemonster.sdk.Remon.(Remon.java:61)
at com.remotemonster.sdk.RemonClient.initRemon(RemonClient.java:81)
at com.remotemonster.sdk.RemonCall.connect(RemonCall.java:115)
at com.unilab.uniting.activities.chatting.VoiceTalkActivity.startCall(VoiceTalkActivity.java:280)
at com.unilab.uniting.activities.chatting.VoiceTalkActivity.onRequestPermissionsResult(VoiceTalkActivity.java:525)
at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7737)
at android.app.Activity.dispatchActivityResult(Activity.java:7560)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4487)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4534)
at android.app.ActivityThread.-wrap20(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1752)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)