peer.on(Peer.PeerEventEnum.CALL, object -> {
// 着信中の画面を表示する
}
着信中の画面でOKを押すと、ビデオチャット状態に遷移させたいのですが、問題はServiceクラスで作成したpeerとActivityのpeerを共有できないことでした。そこで、Service側のpeerを一度切り、Activityで同じpeerIdでpeerを作って、電話を受けた側がかけ直すというやり方で実装しています。
final void destroyPeer() {
// 略
if (mediaConnection != null) {
if (mediaConnection.isOpen) mediaConnection.close();
mediaConnection.on(MediaConnection.MediaEventEnum.STREAM, null);
mediaConnection.on(MediaConnection.MediaEventEnum.CLOSE, null);
mediaConnection.on(MediaConnection.MediaEventEnum.ERROR, null);
mediaConnection = null;
}
Navigator.terminate();
if (peer != null) {
peer.on(Peer.PeerEventEnum.OPEN, null);
peer.on(Peer.PeerEventEnum.CONNECTION, null);
peer.on(Peer.PeerEventEnum.CALL, null);
peer.on(Peer.PeerEventEnum.CLOSE, null);
peer.on(Peer.PeerEventEnum.DISCONNECTED, null);
peer.on(Peer.PeerEventEnum.ERROR, null);
if (!peer.isDisconnected) peer.disconnect();
if (!peer.isDestroyed && canDestroy()) peer.destroy();
peer = null;
}
}
1. Serviceクラスでpeerをopen、callを受ける。
2. callを受けたら一旦peerをdestroyしてActivityを表示する。
3. 表示したActivityでpeerをoepnしてcallし直す。
4. ビデオチャット状態になる。
5. Activityを閉じる時にpeer.destroy()を呼ぶ
6. エラーが出て落ちる
無理やりなやり方だとはわかってはいるのですが、Serviceで待機してコール時にこのような画面を表示させるやり方はありますでしょうか?