Я ищу способ запустить видеозвонок из моего приложения для 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'));
Исправление предлагает отключить 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
- появляется сообщение «Получатель не найден»
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?