Рубрики
Без рубрики

Как Создать Всплывающее Видео Приложение Для Чата с Использованием Android

Многие города и штаты находятся в карантине с момента вспышки эпидемии коронавируса. В течение… С тегами android, agora io, videocall, java.

Многие города и штаты находятся в карантине с момента вспышки эпидемии коронавируса. В это трудное время мы все ищем новые способы оставаться на связи и поддерживать друг друга. Именно тогда приложения для социальных сетей, такие как Домашняя вечеринка , становятся особенно актуальными и полезными.

Эти приложения позволяют пользователям встречаться и весело проводить время со своими друзьями, не выходя из дома. Пользователи могут войти в виртуальную комнату своего друга, просто нажав на кнопку. House party, в частности, также предоставляет некоторые встроенные игры, в которые пользователи могут играть вместе.

Если вы когда-нибудь задавались вопросом, как создаются эти классные приложения, читайте дальше! Этот пост в блоге поможет вам начать работу с основами создания аналогичного приложения для социальных сетей на Android.

  1. Базовое и промежуточное понимание Java и Android SDK
  2. Agora.io учетная запись разработчика
  3. Android Studio и 2 устройства Android

Пожалуйста, обратите внимание: Хотя для дальнейшего изучения не требуется никаких знаний Java/Android, некоторые основные понятия в Java/Android не будут объяснены по пути.

В этом руководстве будут рассмотрены шаги по созданию приложения для социальных сетей, аналогичного домашней вечеринке. Это список основных функций, которые будут включены в наше приложение:

  • Пользователи могут создавать свою учетную запись и входить в нее. Информация об учетной записи пользователя будет сохранена в базе данных Google Firebase в реальном времени.
  • Пользователи могут создавать виртуальные комнаты для проведения видеозвонков.
  • Пользователи могут настраивать доступность своих виртуальных комнат. “Общественные” комнаты открыты для всех друзей, а “частные” комнаты доступны только по приглашению.
  • Во время видеозвонка пользователи могут отправлять личные сообщения другому пользователю в той же комнате, дважды щелкнув по удаленному видео этого пользователя.
  • Пользователи могут общаться в чате с друзьями, которых нет в комнате, нажав кнопку рядом с их именами в списке друзей.

Вы можете найти мой Github демонстрационное приложение в качестве ссылки для этой статьи.

Для начала давайте откроем Android Studio и создадим новый пустой проект.

  1. Откройте Android Studio и нажмите Запустите новый проект Android Studio .
  2. На панели Выберите свой проект выберите Телефон и планшет __> __Пустая активность и нажмите Далее .
  3. Нажмите кнопку Готово . Следуйте инструкциям на экране, если вам нужно установить какие-либо плагины.

Добавление Разрешений для проекта

Добавьте разрешения для проекта в /app/src/main/AndroidManifest.xml файл для доступа к устройству в соответствии с вашими потребностями:







 




...

Интеграция SDK

Добавьте следующую строку в файл /app/build.gradle вашего проекта:

dependencies {
    ...
    implementation 'com.google.firebase:firebase-database:16.0.4'
    //Agora RTC SDK for video call
    implementation 'io.agora.rtc:full-sdk:3.0.0.2'
    //Agora RTM SDK for chat messaging
    implementation 'io.agora.rtm:rtm-sdk:1.2.2'
}

Поскольку наше приложение позволяет пользователям искать и добавлять своих друзей в списки друзей в приложении, нам нужно использовать Firebase Realtime Database для сохранения информации об учетной записи пользователя. Вот шаги, необходимые для подключения вашего приложения к базе данных Firebase в реальном времени:

  1. В вашей Android Studio нажмите ” Tools “, затем выберите ” Firebase “.

  2. С правой стороны вы должны увидеть вкладку Firebase assistant. Найдите ” База данных в реальном времени ” и нажмите ” Сохранить и извлечь данные “.

  3. Затем вы должны увидеть подробную страницу базы данных в реальном времени. Нажмите кнопку ” Подключиться к Firebase ” и кнопку ” Добавить базу данных реального времени в ваше приложение “. Следуйте инструкциям на экране, если таковые имеются.

  4. Теперь ваше приложение подключено к базе данных Firebase в реальном времени. Последнее, что вам нужно сделать, это зайти в консоль Firebase и изменить правила базы данных. Не забудьте выбрать базу данных реального времени вместо облачного хранилища Firestore. Измените правила чтения и записи на ” true “, чтобы у вас был доступ к базе данных.

Во-первых, давайте создадим целевую страницу для нашего приложения. Пожалуйста, обратите внимание: Вы можете найти файл .xml здесь .

Если пользователь нажмет кнопку ” ЗАРЕГИСТРИРОВАТЬСЯ “, мы перейдем на страницу регистрации. Если пользователь нажимает ” У меня уже есть учетная запись ” текст, мы перейдем на страницу входа в систему. Давайте реализуем логику транзакций activities, используя Intent.

public void onLoginButtonClick(View view) {
    Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
    startActivity(intent);
}

public void onSignUpButtonClick(View view) {
    Intent intent = new Intent(SplashActivity.this, SigninActivity.class);
    startActivity(intent);
}

Теперь давайте создадим пользовательский интерфейс для страницы входа и страницы регистрации. Пожалуйста, обратите внимание: Вы можете найти XML-файл для страницы входа в систему здесь и страница регистрации здесь .

Когда пользователь нажимает кнопку ” Далее “, нам нужно получить имя пользователя и передать его следующему действию, VideoCallActivity , чтобы начать видеозвонок. Вот код для этого в действии входа в систему, и действие регистрации будет аналогичным.

public void onLoginNextClick(View view) {
    EditText userNameEditText = findViewById(R.id.et_login_user_name);
    String userName = userNameEditText.getText().toString();

    if(userName == null || userName == "") {
        Toast.makeText(this, "user name cannot be empty", Toast.LENGTH_SHORT).show();
    }else {
        Intent intent = new Intent(this, VideoCallActivity.class);
        intent.putExtra("userName", userName);
        startActivity(intent);
    }
}

В методе onCreate в VideoCallActivity нам нужно сохранить информацию о пользователе в базе данных Firebase. Сначала получите ссылку на базу данных, вызвав:

mRef = FirebaseDatabase.getInstance().getReference("Users");

Затем мы вызываем установите значение , чтобы сохранить информацию о пользователе как дочернюю в базе данных. Информация о пользователе хранится в формате DBUser. В объекте DBUser он поддерживает имя пользователя, идентификатор пользователя, состояние комнаты пользователя и список друзей.

mRef.push();
mRef.child(userName).setValue(new DBUser(userName, user.getAgoraUid(), localState, DBFriend));

На этом этапе, если вы запустите это приложение, вы сможете увидеть новую информацию о пользователе, сохраненную в вашей базе данных после входа в приложение.

После того, как пользователь вошел в приложение, он по умолчанию находится в своей виртуальной комнате. Этот пользователь должен быть в канале видеозвонков, чтобы его друг мог присоединиться к его каналу для звонка. Итак, в VideoCallActivity нам нужно реализовать логику видеовызова. Но как начать видеозвонок? Кажется, это очень сложно сделать. К счастью, я узнал, что Agora Video SDK предоставляет самый простой способ начать видеозвонок.

Во-первых, давайте создадим пользовательский интерфейс для этого действия: Пожалуйста, обратите внимание: Вы можете найти файл .xml здесь .

Затем в методе onCreate() в VideoCallActivity давайте сделаем несколько следующих действий:

  1. Инициализировать движок Agora Rtc
  2. Настройка локального видео-холста
  3. Присоединиться к каналу

1. Инициализировать движок Agora Rtc

Чтобы инициализировать движок Agora video engine, просто вызовите Rtc Engine.create(context, AppID, обработчик событий Rtc) для создания экземпляра RtcEngine.

mRtcEngine = RtcEngine.create(getBaseContext(), appID, mRtcEventHandler);

Чтобы получить Идентификатор приложения в параметре, выполните следующие действия:

  1. Создайте проект Agora в консоли Agora.
  2. Перейдите на вкладку Управление проектами на левой панели навигации.
  3. Нажмите “Создать” и следуйте инструкциям на экране, чтобы задать имя проекта, выбрать механизм аутентификации и нажать “Отправить”.
  4. На странице Управления проектом найдите идентификатор приложения вашего проекта.

mRtcEventHandler – это обработчик для управления различными событиями, происходящими с помощью механизма Rtc. Давайте реализуем его с помощью некоторых базовых обработчиков событий, необходимых для этого приложения.

private final IRtcEngineEventHandler mRtcEventHandler = new IRtcEngineEventHandler() {
    @Override
    // Listen for the onJoinChannelSuccess callback.
    // This callback occurs when the local user successfully joins the channel.
    public void onJoinChannelSuccess(String channel, final int uid, int elapsed) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                user.setAgoraUid(uid);
                mRef.child(getUserName()).setValue(new DBUser(getUserName(), user.getAgoraUid(), localState, DBFriend));
            }
        });
    }

    @Override
    // Listen for the onFirstRemoteVideoDecoded callback.
    // This callback occurs when the first video frame of a remote user is received and decoded after the remote user successfully joins the channel.
    // You can call the setupRemoteVideo method in this callback to set up the remote video view.
    public void onFirstRemoteVideoDecoded(final int uid, int width, int height, int elapsed) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                SurfaceView mRemoteView = RtcEngine.CreateRendererView(getApplicationContext());

                mRemoteView.setZOrderOnTop(true);
                mRemoteView.setZOrderMediaOverlay(true);
                mRtcEngine.setupRemoteVideo(new VideoCanvas(mRemoteView, VideoCanvas.RENDER_MODE_HIDDEN, uid));
            }
        });
    }

    @Override
    // Listen for the onUserOffline callback.
    // This callback occurs when the remote user leaves the channel or drops offline.
    public void onUserOffline(final int uid, int reason) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                onRemoteUserLeft(uid);
            }
        });
    }
};

Пожалуйста, ознакомьтесь с комментариями в верхней части каждого метода обработки событий, чтобы лучше их понять. Дополнительные обработчики событий Rtc Engine, которые вы можете использовать, см. в документе Agora Rtc API .

Пожалуйста, обратите внимание: Часть логики отображения просмотров видео на экране скрыта. Вы можете проверить Демонстрационное приложение Github для лучшего понимания того, как динамически отображать и удалять просмотры видео на экране.

2. Настройка локального видео-холста

Чтобы запустить локальное видео (увидеть себя на экране), вам нужно вызвать две функции: включить видео() и setupLocalVideo() на экземпляре RtcEngine. В функции setup Local Video() просмотр поверхности создается путем вызова Rtc Engine.CreateRenderView(context)

mRtcEngine.enableVideo();
mRtcEngine.enableInEarMonitoring(true);
mRtcEngine.setInEarMonitoringVolume(80);

SurfaceView surfaceView = RtcEngine.CreateRendererView(getBaseContext());
mRtcEngine.setupLocalVideo(new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_HIDDEN, 0));
surfaceView.setZOrderOnTop(false);
surfaceView.setZOrderMediaOverlay(false);

3. Присоединиться к каналу

Теперь мы готовы присоединиться к каналу, вызвав joinChannel() на экземпляре Rtc Engine. Имя канала – это имя пользователя, которое мы получаем из предыдущего действия. В этом случае каждый пользователь присоединится к каналу видеовызова с введенным им именем пользователя при входе в систему.

mRtcEngine.joinChannel(token, channelName, "Extra Optional Data", 0);

Пожалуйста, обратите внимание: токен в параметре может быть установлен в значение null. Вы можете получить более подробную информацию о токене здесь .

Вызвав эту функцию и успешно присоединившись к каналу, обработчик событий Rtc Engine запустит метод onJoinChannelSuccess() , который мы реализовали на предыдущем шаге. Он вернет уникальный идентификатор с сервера Agora. Нам нужно обновить информацию о пользователе с помощью uid в базе данных.

@Override
public void onJoinChannelSuccess(String channel, final int uid, int elapsed) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            user.setAgoraUid(uid);
            mRef.child(getUserName()).setValue(new DBUser(getUserName(), user.getAgoraUid(), localState, DBFriend));
        }
    });
}

4. Поиск и добавление друзей

Как и в реальном социальном приложении, пользователь должен иметь возможность искать своих друзей по именам и добавлять их в свой список друзей. Поэтому, когда пользователь нажимает на правую верхнюю кнопку, приложение должно отображать панель поиска друзей следующим образом: пользователь может ввести имя своего друга в текст редактирования и нажать кнопку поиска. Нам нужно выполнить поиск по имени его друга в базе данных и отобразить результат в recyclerview. Вот как искать людей по имени в базе данных:

childEventListener = new ChildEventListener() {
    @Override
    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
        DBUser result = dataSnapshot.getValue(DBUser.class);

        searchFriendList.add(result);
        mRef.orderByChild("name").startAt(searchFriendName).endAt(searchFriendName + "\uf8ff").removeEventListener(childEventListener);

        mFriendListRecyclerViewAdapter = new FriendListRecyclerViewAdapter(searchFriendList);
        mFriendListRecyclerViewAdapter.setOnItemClickListener(new FriendListRecyclerViewAdapter.ClickListener() {
            @Override
            public void onItemClick(int position, View v) {
                addFriend(searchFriendList.get(position).getName());
                mSearchFriendEditText.setText("");
                searchFriendList.clear();
                mFriendListRecyclerView.setAdapter(mFriendListRecyclerViewAdapter);
            }
        });
        RecyclerView.LayoutManager manager = new GridLayoutManager(getBaseContext(), 1);
        mFriendListRecyclerView.setLayoutManager(manager);

        mFriendListRecyclerView.setAdapter(mFriendListRecyclerViewAdapter);
    }

    ...
};

mRef.orderByChild("name").startAt(searchFriendName).endAt(searchFriendName + "\uf8ff").addChildEventListener(childEventListener);

В окне recyclerview мы отобразим имя друга, которое было найдено в базе данных, с помощью кнопки ” Добавить ” сбоку. Если пользователь нажимает кнопку ” Добавить “, этот друг добавляется в список друзей пользователя. Нам также необходимо обновить список друзей пользователя в базе данных.

public void addFriend(String userName) {
    DBFriend.add(userName);
    mRef.child(this.userName).setValue(new DBUser(this.userName, user.getAgoraUid(), localState, DBFriend));
}

5. Присоединяйтесь к другу

Поскольку у нас есть обновленный список друзей, мы можем отобразить панель друзей пользователя, когда пользователь нажимает на верхнюю левую кнопку. Теперь пользователь может просмотреть свой список друзей и выбрать, к какому другу присоединиться к звонку. Сбоку от имени своего друга создайте кнопку “Присоединиться”, чтобы пользователь мог присоединиться к виртуальной комнате этого друга и провести с ним видеозвонок.

public void joinFriend(String friendName){
    channelName = friendName;
    finishCalling();
    startCalling();
}

Давайте изменим имя канала к имени друга пользователя, так что, когда они начнут вызывать метод, пользователь присоединится к другому каналу с тем же именем, что и имя его друга.

private void startCalling() {
    //set up local video canvas
    mRtcEngine.enableVideo();
    mRtcEngine.enableInEarMonitoring(true);
    mRtcEngine.setInEarMonitoringVolume(80);

    SurfaceView surfaceView = RtcEngine.CreateRendererView(getBaseContext());
    mRtcEngine.setupLocalVideo(new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_HIDDEN, 0));
    surfaceView.setZOrderOnTop(false);
    surfaceView.setZOrderMediaOverlay(false);

    //join the channel
    mRtcEngine.joinChannel(null, channelName, "Extra Optional Data", 0);}

Если пользователь хочет прервать звонок из комнаты своего друга и вернуться в свою собственную виртуальную комнату, он может нажать на кнопку “X” в центре внизу, чтобы добиться этого. Давайте создадим логическое значение с именем is Local Call , чтобы отслеживать, находится ли пользователь в своей собственной виртуальной комнате или нет. Нам нужно установить название канала как у пользователя имя пользователя чтобы он присоединился к каналу с тем же именем канала, что и его имя пользователя, после вызова начните вызывать метод . Таким образом, он возвращается в свою виртуальную комнату.

if (isLocalCall) {
    //when the user is in his own room
    ...
    }
}else {
    //when user is joining other people's room
    //leave that room and come back to user's own room
    isLocalCall = true;
    finishCalling();
    channelName = userName;
    startCalling();
}

6. Заприте комнату

Иногда пользователь хочет сделать свою собственную виртуальную комнату “приватной”, чтобы никто другой не мог присоединиться к его комнате, кроме тех, кто уже находится в комнате. Так как же нам этого добиться?

Создайте строку с именем local State для отслеживания состояния комнаты. Существует два состояния: “Открыто” или “Заблокировано”. По умолчанию состояние комнаты – “Открыто”. Когда пользователь нажимает кнопку “X” в центре внизу, находясь в своей собственной виртуальной комнате (что означает локальный вызов), нам нужно установить для состояния комнаты значение “Lock”, чтобы установить для состояния комнаты значение “private”. Если он нажмет на это снова, нам нужно снова установить состояние комнаты в положение “Открыто”. Кроме того, мы должны обновить информацию о состоянии комнаты в базе данных, чтобы другие пользователи могли знать текущее состояние этой комнаты.

if (isLocalCall) {
    //when the user is in his own room
    if (localState.equals(Constant.USER_STATE_LOCK)) {
        //set the room to public
        localState = Constant.USER_STATE_OPEN;
        mRef.child(this.userName).setValue(new DBUser(this.userName, user.getAgoraUid(), localState, DBFriend));
        showToast("Room set to public");
    }else {
        //set the room to private so that no one can join the room
        localState = Constant.USER_STATE_LOCK;
        mRef.child(this.userName).setValue(new DBUser(this.userName, user.getAgoraUid(), localState, DBFriend));
        showToast("Room set to private");
    }
}else {
    //when user is joining other people's room
    //leave that room and come back to user's own room
    isLocalCall = true;
    finishCalling();
    channelName = userName;
    startCalling();
}

После этого каждый раз, прежде чем пользователь присоединится к каналу друга, нам нужно проверить, не является ли комната этого друга приватной. В противном случае мы отобразим тост на экране.

joinFriendChildEventListener = new ChildEventListener() {
    @Override
    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
        DBUser result = dataSnapshot.getValue(DBUser.class);
        if (result.getState().equals(Constant.USER_STATE_OPEN)) {
            joinFriend(DBFriend.get(position));
            mShowFriendLinearLayout.setVisibility(View.GONE);
        }else {
            showToast(DBFriend.get(position) + "'s room is locked. You can message him to say hi!");
        }

        mRef.orderByChild("name").startAt(DBFriend.get(position)).endAt(DBFriend.get(position) + "\uf8ff").removeEventListener(joinFriendChildEventListener);
    }

    ...
};
mRef.orderByChild("name").startAt(DBFriend.get(position)).endAt(DBFriend.get(position) + "\uf8ff").addChildEventListener(joinFriendChildEventListener);

На данный момент пользователи нашего приложения могут искать и добавлять друзей, присоединяться к виртуальной комнате друга и блокировать его виртуальную комнату. Теперь давайте внедрим функцию обмена сообщениями в чате для нашего приложения.

Реализовать функцию обмена сообщениями в чате также очень просто с помощью Agora Messaging SDK .

Запустите Rdmclient

Чтобы включить функцию чата в нашем приложении, нам нужно создать Rtm-клиент с использованием Agora Messaging SDK.

mRtmclient = RtmClient.createInstance(mContext, appID, new RtmClientListener() {
        @Override
        public void onConnectionStateChanged(int state, int reason){
            for (RtmClientListener listener : mListenerList) {
                listener.onConnectionStateChanged(state, reason);
            }
        }@Override
        public void onMessageReceived(RtmMessage rtmMessage, String peerId) { ... }
});

Здесь мы передаем тот же AppID , который мы использовали при инициализации движка Agora Video engine.

В обратном вызове onConnectionStateChanged() мы вызываем Клиентский прослушиватель Rtm . Мы реализуем это позже в сообщении activity.

В методе onCreate в VideoCallActivity нам нужно войти в систему Rdmclient .

mRtmClient.login(null, userName, new io.agora.rtm.ResultCallback() {
    @Override
    public void onSuccess(Void aVoid) {
        ...
    }

    @Override
    public void onFailure(ErrorInfo errorInfo) {
        ...
    }
});

Мы используем тот же имя пользователя как тот, который мы использовали для видеозвонка.

Теперь давайте создадим кнопку “Чат” рядом с кнопкой “Присоединиться” в списке друзей пользователя, чтобы, когда пользователь нажимает на нее, отображалась панель обмена сообщениями в чате следующим образом: Пользователь может отредактировать свое сообщение в разделе Редактировать текст и отправить сообщение своему другу, нажав кнопку “Отправить” кнопка. Сообщения между пользователем и его другом будут отображаться в представлении recycler.

Сначала реализуйте логику onClick для кнопки “Отправить”.

public void onClickSend(View v) {
    String content = mMsgEditText.getText().toString();
    RtmMessage message = mRtmClient.createMessage();
    message.setText(content);

    // step 2: send message to peer
    mRtmClient.sendMessageToPeer(mPeerId, message, mChatManager.getSendMessageOptions(), new ResultCallback() {
    @Override
    public void onSuccess(Void aVoid) {
        ...
    }

    @Override
    public void onFailure(ErrorInfo errorInfo) {
        ...
    }
    });
}

Затем нам нужно добавить логику для получения сообщений чата. Чтобы получать сообщения в приватном чате, нам необходимо зарегистрироваться Прослушиватель Rtm-клиента . Помните, что когда мы создавали экземпляр Rtm-клиента, мы вызывали Rtm Client Listener в обратных вызовах. Теперь давайте осуществим это. В обратном вызове onMessageReceived() мы помещаем логику для отображения сообщения в RecyclerView.

class MyRtmClientListener implements RtmClientListener {

    @Override
    public void onConnectionStateChanged(final int state, final int reason) {
        ...
    }

    @Override
    public void onMessageReceived(final RtmMessage message, final String peerId) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                String content = message.getText();
                if (peerId.equals(mPeerId)) {
                    MessageBean messageBean = new MessageBean(peerId, content,false);
                    messageBean.setBackground(getMessageColor(peerId));
                    mMessageBeanList.add(messageBean);
                    mMessageAdapter.notifyItemRangeChanged(mMessageBeanList.size(), 1);
                    mRecyclerView.scrollToPosition(mMessageBeanList.size() - 1);
                } else {
                    MessageUtil.addMessageBean(peerId, content);
                }
            }
        });
    }
    ...
}

Теперь мы можем позволить пользователям общаться в чате внутри приложения. Но они могут начать общение в чате, только нажав кнопку в своем списке друзей. Давайте сделаем это немного причудливее! Мы хотим разрешить пользователю начать общение в чате со своим другом, дважды щелкнув по удаленному видео этого друга, когда он находится в режиме видеозвонка. Как мы можем этого добиться?

Во-первых, нам нужно добавить прослушиватель двойного щелчка для контейнера просмотра видео. Затем, когда срабатывает двойной щелчок, мы можем получить идентификатор Agora uid удаленного пользователя и найти имя этого пользователя в базе данных.

chatSearchChildEventListener = new ChildEventListener() {
    @Override
    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
        DBUser result = dataSnapshot.getValue(DBUser.class);
        startMessaging(result.getName());

        mRef.orderByChild("uid").startAt(user.mUid).endAt(user.mUid + "\uf8ff").removeEventListener(chatSearchChildEventListener);

    }

    ...
};

mRef.orderByChild("uid").startAt(user.mUid).endAt(user.mUid + "\uf8ff").addChildEventListener(chatSearchChildEventListener);

После этого мы можем выполнить предыдущие шаги, чтобы запустить функцию обмена сообщениями, передав имя пользователя.

На этом этапе все основные функциональные возможности нашего приложения реализованы. Давайте реализуем логику переключения кнопок отключения камеры и звука onClick.

Переключить камеру

Эта кнопка предназначена для переключения с использования фронтальной камеры вашего мобильного телефона на заднюю камеру или наоборот. Чтобы сделать это, просто вызовите switch Camera() в экземпляре RtcEngine.

mRtcEngine.switchCamera();

Отключение/включение звука

Иногда пользователи хотят отключить вводимый голос во время видеозвонка. Это также легко реализовать, просто вызвав отключение локального аудиопотока() на экземпляре Rtc Engine и передает, отключен ли пользователь уже в параметре.

mRtcEngine.muteLocalAudioStream(isMuted);

Теперь давайте запустим наше приложение!

Перейдите в Android Studio, убедитесь, что ваше Android-устройство подключено к сети, и нажмите Запустите , чтобы создать приложение на вашем устройстве. Не забудьте создать приложение на двух устройствах, чтобы начать видеозвонок.

Поздравляю! Вы только что создали себе социальное приложение, похожее на House party!

Спасибо вам за то, что последовали за мной. Если вы хотите увидеть больше функций, таких как push-уведомления, пожалуйста, оставьте комментарий ниже! Вот адрес электронной почты для любых вопросов, которые у вас могут возникнуть: devrel@agora.io .

Оригинал: “https://dev.to/ysc1995/how-to-build-a-drop-in-video-chat-application-using-android-1p5o”