Как начать видеозвонок из приложения Delphi для Android?

Я ищу способ начать видеозвонок из моего приложения для Android, написанного на Delphi 10.3. Для этого я хочу использовать намерения Android для стороннего приложения (WhatsApp или Skype).

Вот что я уже пробовал. Я использую 123 в качестве идентификатора контакта, ожидая, что даже если это недействительный идентификатор, WhatsApp все равно должен открыться и предупредить об этом:

На основании https://stackoverflow.com/a/38674897 - ничего не происходит

Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
Intent.setData(StrToJURI('content://com.android.contacts/data/123'));
Intent.setType(StringToJString('vnd.android.cursor.item/vnd.com.whatsapp.voip.call'));

На основе https://stackoverflow.com/a/46049004 - ничего не происходит

Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
Intent.setData(StrToJURI('content://com.android.contacts/data/123'));
Intent.setType(StringToJString('vnd.android.cursor.item/vnd.com.whatsapp.video.call'));
Intent.setPackage(StringToJString('com.whatsapp'));

Fix предлагает не использовать SetType https://stackoverflow.com/a/28244207 - ничего не происходит

Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
Intent.setDataAndType(
  StrToJURI('content://com.android.contacts/data/123'),
  StringToJString('vnd.android.cursor.item/vnd.com.whatsapp.video.call'));
Intent.setPackage(StringToJString('com.whatsapp'));

Пример кода Skype на основе https://stackoverflow.com/a/14294299 - он открывает Skype, но не открывает чат / звонок с первой попытки. Если я переключаюсь в свое приложение, когда Skype открыт в фоновом режиме, при второй попытке он начнет видеозвонок.

Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
//Intent.setData(StrToJURI('skype:username?call&video=true'));
Intent.setData(StrToJURI('skype:username'));

Пробуем действие videocall - выскакивает сообщение "Receiver not found"

Intent := TJIntent.Create;
Intent.setAction(StringToJString('com.android.phone.videocall'));
Intent.setData(StrToJURI('skype:username'));

Intent := TJIntent.Create;
Intent.setAction(StringToJString('com.android.phone.videocall'));
Intent.setData(StrToJURI('tel:123456789'));

Все намерения выполняются с:

if MainActivity.getPackageManager.queryIntentActivities(Intent, TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY).size > 0 then
  MainActivity.startActivity(Intent)
else
  ShowMessage('Receiver not found');

Как сделать видеозвонок из приложения для Android, написанного на Delphi?

Тот же вопрос на русском: ru.stackoverflow.com/questions/923657

Kromster 21.12.2018 07:48

Кажется, в этих ответах больше кода, чем вы показываете

Dave Nottage 21.12.2018 09:05

@DaveNottage добавил код намеренного вызова. Что еще я могу предоставить?

Kromster 21.12.2018 09:07

Вы пробовали другие параметры выполнения намерения, кроме TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY?

Lucker10 14.01.2019 10:04

@ Lucker10 Пробовал прямо сейчас MATCH_ALL, ничего не менял.

Kromster 14.01.2019 10:19
7
5
955
1

Ответы 1

Это не конкретная проблема Dephi. Ваш код не работает, даже если он находится в java. (Он показывает, что приемник не найден)

См. Следующее. Они в java, но я думаю, они могут указать вам правильный путь

  1. Android-сделать звонок в WhatsApp
  2. Android: получение имени контакта из номера телефона
  3. https://developer.android.com/training/permissions/requesting#java

Спасибо за ссылки, правда они, кажется, не отвечают на вопрос. 1. Имеет тот же код, о котором уже идет речь. 2. Не получается получить имя контакта. 3. Получение разрешений тоже не так.

Kromster 17.01.2019 05:50

Другие вопросы по теме