我正在尝试使用Tokbox创建一个视频对话应用程序..该网站已经存在,但我必须制作Android应用程序。问题在于:当我从网站上调用某人到Android应用程序时:连接工作正常,但当我在网站上关闭对话时,它会因此错误停止应用程序:
ConversationActivity has leaked IntentReceiver com.opentok.android.Session that was originally registered here. Are you missing a call to unregisterReceiver()?
此外,如果我从应用程序呼叫某人到网站:没问题!这是我活动的java代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
//Set du context pour un alertdialog sur cette page aussi
socket = SocketManager.getInstance(context);
socket.setContext(context);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conversation);
Intent myIntent = getIntent();
SESSION_ID = myIntent.getStringExtra("sessionId");
TOKEN = myIntent.getStringExtra("token");
requestPermissions();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@AfterPermissionGranted(RC_VIDEO_APP_PERM)
private void requestPermissions() {
String[] perms = {Manifest.permission.INTERNET, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO};
if (EasyPermissions.hasPermissions(this, perms)) {
// initialize view objects from your layout
mPublisherViewContainer = (FrameLayout) findViewById(R.id.publisher_container);
mSubscriberViewContainer = (FrameLayout) findViewById(R.id.subscriber_container);
// initialize and connect to the session
mSession = new Session.Builder(this, API_KEY, SESSION_ID).build();
mSession.setSessionListener(this);
mSession.connect(TOKEN);
} else {
EasyPermissions.requestPermissions(this, "This app needs access to your camera and mic to make video calls", RC_VIDEO_APP_PERM, perms);
}
}
// SessionListener methods
@Override
public void onConnected(Session session) {
Log.i(LOG_TAG, "Session Connected");
mPublisher = new Publisher.Builder(this).build();
mPublisher.setPublisherListener(this);
mPublisherViewContainer.addView(mPublisher.getView());
mSession.publish(mPublisher);
}
@Override
public void onDisconnected(Session session) {
Log.i(LOG_TAG, "Session Disconnected");
}
@Override
public void onStreamReceived(Session session, Stream stream) {
Log.i(LOG_TAG, "Stream Received");
if (mSubscriber == null) {
mSubscriber = new Subscriber.Builder(this, stream).build();
mSession.subscribe(mSubscriber);
mSubscriberViewContainer.addView(mSubscriber.getView());
}
}
@Override
public void onStreamDropped(Session session, Stream stream) {
Log.i(LOG_TAG, "Stream Dropped");
if (mSubscriber != null) {
mSubscriber = null;
mSubscriberViewContainer.removeAllViews();
}
}
@Override
public void onError(Session session, OpentokError opentokError) {
Log.e(LOG_TAG, "Session error: " + opentokError.getMessage());
}
// PublisherListener methods
@Override
public void onStreamCreated(PublisherKit publisherKit, Stream stream) {
Log.i(LOG_TAG, "Publisher onStreamCreated");
}
@Override
public void onStreamDestroyed(PublisherKit publisherKit, Stream stream) {
Log.i(LOG_TAG, "Publisher onStreamDestroyed");
}
@Override
public void onError(PublisherKit publisherKit, OpentokError opentokError) {
Log.e(LOG_TAG, "Publisher error: " + opentokError.getMessage());
}
并且已使用此代码从套接字调用此活动。当我在网站上被某人打电话时:
case "goto-room":
try {
sessionId = data_received.get(1).toString();
} catch (JSONException e) {
e.printStackTrace();
}
String token = user.getToken(sessionId);
socket.emit("add-me-to-room", sessionId);
Intent intent = new Intent(context, ConversationActivity.class);
intent.putExtra("sessionId", sessionId);
intent.putExtra("token", token);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
break;
当我在网站上打电话给某人时:
case "room-created":
socket.emit("add-me-to-room", sessionId);
JSONArray inputs = new JSONArray();
inputs.put(partner.getInfoAboutUser("id"));
inputs.put(sessionId);
socket.emit("goto-room", inputs);
System.out.println("gotoroom sent" +sessionId);
String token2 = user.getToken(sessionId);
Intent intent2 = new Intent(context, ConversationActivity.class);
intent2.putExtra("sessionId", sessionId);
intent2.putExtra("token", token2);
intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent2);
请帮助我们:)谢谢!
答案 0 :(得分:0)
您确定您的变量"合作伙伴"当你接到电话时,我们已经初始化并且不是空的吗?请检查一下!我们没有完整的代码......