#android #android-intent #call #telegram #mime-types
#Android #android-намерение #вызов #telegram #mime-типы
Вопрос:
Я хочу запустить видеовызов Telegram из своего приложения для Android, поэтому я декомпилировал новый apk-файл Telegram, чтобы найти следующее:
<intent-filter>
<action
android:name="android.intent.action.VIEW" />
<category
android:name="android.intent.category.DEFAULT" />
<data
android:mimeType="vnd.android.cursor.item/vnd.org.telegram.messenger.android.profile" />
<data
android:mimeType="vnd.android.cursor.item/vnd.org.telegram.messenger.android.call" />
<data
android:mimeType="vnd.android.cursor.item/vnd.org.telegram.messenger.android.call.video" />
</intent-filter>
Есть что-то, связанное с call.video
, но я не знаю, как использовать этот data
элемент в коде, моей единственной попыткой было сделать следующее:
Intent telegram = new Intent(Intent.ACTION_VIEW ,
Uri.parse("https://telegram.me/" contact));
startActivity(telegram);
Я ожидаю что-то вроде telegram.setType("video");
или telegram.setType("vnd.android.cursor.item/vnd.org.telegram.messenger.android.call.video")
.
Возможно ли это в конце? Заранее спасибо
Комментарии:
1. «Я декомпилировал новый telegram apk» — Telegram имеет открытый исходный код . Более актуальным
<intent-filter>
для вас будет тот, который ниже, который показывает, какие веб-адреса поддерживает это действие.2. Итак, следующая строка
<data android:mimeType="vnd.android.cursor.item/vnd.org.telegram.messenger.android.call.video"/>
бесполезна для меня в моих намерениях?3. Только если у вас есть,
Uri
чей MIME-тип соответствует. Обычно подобный тип MIME поступает из записи вContentProvider
, а не из веб-URL.
Ответ №1:
Вам нужно использовать URI ContactID с типом mimeType, который является «vnd.android.cursor.item /vnd.org.telegram.messenger.android.call.video». Сначала ищите ContactID по номеру телефона:
private String getContactIdByPhoneNumber(String phoneNumber) {
ContentResolver contentResolver = getContentResolver();
String contactId = null;
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
String[] projection = new String[]{ContactsContract.PhoneLookup._ID};
Cursor cursor = contentResolver.query(uri, projection, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID));
}
cursor.close();
}
return contactId;
}
затем используйте этот ContactID и mimeType для поиска URI:
private Uri getUriFromPhoneNumber(String phoneNumber) {
Uri uri = null;
String contactId = getContactIdByPhoneNumber(phoneNumber);
String mimeTypeTelegram = "vnd.android.cursor.item/vnd.org.telegram.messenger.android.call.video";
Cursor cursorTelegram = getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
new String[]{ContactsContract.Data._ID},
ContactsContract.Data.CONTACT_ID "=? AND " ContactsContract.Data.MIMETYPE "=?",
new String[]{contactId, mimeTypeTelegram}, null);
if (cursorTelegram != null) {
while (cursorTelegram.moveToNext()) {
String id = cursorTelegram.getString(cursorTelegram.getColumnIndexOrThrow(ContactsContract.Data._ID));
if (!TextUtils.isEmpty(id)) {
uri = Uri.parse(ContactsContract.Data.CONTENT_URI "/" id);
break;
}
}
cursorTelegram.close();
}
return uri;
}
после чего используйте намерение.ACTION_VIEW:
public void videoCallToTelegramContact(String phoneNumber) {
Uri uri = getUriFromPhoneNumber(phoneNumber);
Log.d(TAG, uri "");
if (uri != null) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
Было бы неплохо добавить проверку установленного «Telegram», а также того, разрешил ли пользователь видеовызов.
Комментарии:
1. Возможно ли отправить сообщение, используя ту же логику (по номеру телефона, а не по идентификатору пользователя Telegram)?
2. Нет, это невозможно, если вызов этого явно открывает приложение, тогда сообщение должно быть отправлено в фоновом режиме. Разбирайтесь только с Telegram API или Telegram Bot. Возможно, добавьте в свой проект библиотеку Telegram — ‘TDLib’ . информация: core.telegram.org