Как поделиться глубокой ссылкой в ​​телеграмме на приложение, установленное на моем устройстве Android? - PullRequest
0 голосов
/ 19 января 2019

Я хочу получить доступ к глубокой ссылке в телеграмме на мое собственное приложение, установленное на моем устройстве Android.

Я создал регистрацию своего приложения (моя активность, которая должна быть открыта), похоже,показано ниже:

[Activity(Label = "@string/app_name", MainLauncher = true, Theme = "@style/Theme.Splash", NoHistory = true, ScreenOrientation = ScreenOrientation.Portrait)]
[IntentFilter(new[] { Intent.ActionView }, Categories = new[] {Intent.ActionView,Intent.CategoryDefault,Intent.CategoryBrowsable}, DataScheme = "todolist", DataHost = "my_code_is_here")]
    public class SplashScreen : MvxSplashScreenActivity
    {
        public SplashScreen()
            : base(Resource.Layout.SplashScreen)
        {
        }
    }

После этого я хотел убедиться, что все сделал правильно.Я создал файл HTML, его код показан ниже:

<a href="todolist://my_code_is_here">This is an example</a>

Я открыл этот файл на своем устройстве Android с помощью браузера Google Chrome.Одна ссылка была показана, когда я нажал на нее, мое приложение открылось!Все заработало!

После этого внутри моей программы я создал метод для обмена текстовыми сообщениями в Telegram, код которого представлен ниже:

private string _shareText = "Hi, this is my message.";
private readonly string _dataMIMEType = "text/plain";
private readonly string _titleOfChooserIntent = "Share with";
private readonly string _appName = "org.telegram.messenger";
private Intent _actionSendIntent;
private Intent _chooserIntent;
public ImageButton TelegramShare;
public MyClass()
{
    TelegramShare = FindViewById<ImageButton>(Resource.Id.image_button_share);
    TelegramShare.Click += ShareEmailToTelegram;
}
private void ShareEmailToTelegram(object sender, EventArgs e)
{
    if (IsAppInstalled(_appName))//check whether Telegram is installed
    {
        _actionSendIntent = new Intent(Intent.ActionSend);
        _actionSendIntent.SetType(_dataMIMEType);
        _actionSendIntent.SetPackage(_appName);
        if (_actionSendIntent != null)
        {
            _actionSendIntent.PutExtra(Intent.ExtraText, _shareText);
            _chooserIntent = Intent.CreateChooser(_actionSendIntent, _titleOfChooserIntent);
            Application.Context.StartActivity(_chooserIntent);
            return;
        }
    }
    else
    {
        Toast.MakeText(Application.Context, "Telegram is not installed", ToastLength.Short).Show();
    }
}

И все заработало, нажав на кнопкуКнопка, сообщение отправляется в Telegram.

Я вставляю ссылку на Google вместо текста:

_shareText = "https://www.google.com";

После отправки его в Telegram, это была ссылка, и когда я нажал на нее, Google.com открыт.Но когда я вставляю ссылку на свое приложение вместо текста:

_shareText = "todolist://my_code_is_here";

Затем в Telegram отправлялся только текст, который не был ссылкой!

Я пытался сделать что-то подобное:

if (_actionSendIntent != null)
{
    var uri = new Uri("todolist://my_code_is_here");
    _actionSendIntent.PutExtra(Intent.ExtraText, uri);
    _chooserIntent = Intent.CreateChooser(_actionSendIntent, _titleOfChooserIntent);
    Application.Context.StartActivity(_chooserIntent);
    return;
}

И вот так:

if (_actionSendIntent != null)
{
    string s = "<a href=\"" + "todolist://my_code_is_here\"" + ">This is an example</a>";
    _actionSendIntent.PutExtra(Intent.ExtraText, Html.FromHtml(s));
    _chooserIntent = Intent.CreateChooser(_actionSendIntent, _titleOfChooserIntent);
    Application.Context.StartActivity(_chooserIntent);
    return;
}

Результат был тот же, это была не ссылка, а просто текст!

Пожалуйста, кто-то, помогитемне найти ответ!

Заранее спасибо!

...