Я ищу способ начать видеозвонок из моего приложения для 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?
Кажется, в этих ответах больше кода, чем вы показываете
@DaveNottage добавил код намеренного вызова. Что еще я могу предоставить?
Вы пробовали другие параметры выполнения намерения, кроме TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY?
@ Lucker10 Пробовал прямо сейчас MATCH_ALL, ничего не менял.
Это не конкретная проблема Dephi. Ваш код не работает, даже если он находится в java. (Он показывает, что приемник не найден)
См. Следующее. Они в java, но я думаю, они могут указать вам правильный путь
Спасибо за ссылки, правда они, кажется, не отвечают на вопрос. 1. Имеет тот же код, о котором уже идет речь. 2. Не получается получить имя контакта. 3. Получение разрешений тоже не так.
Тот же вопрос на русском: ru.stackoverflow.com/questions/923657