托盘箱错误"您是否错过了取消注册接收器的呼叫"

时间:2017-07-10 11:57:54

标签: java android tokbox

我正在尝试使用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);

请帮助我们:)谢谢!

1 个答案:

答案 0 :(得分:0)

您确定您的变量"合作伙伴"当你接到电话时,我们已经初始化并且不是空的吗?请检查一下!我们没有完整的代码......