在安卓手机中打开电报频道

23
在我的应用程序中,我想使用Intent来打开特定的电报频道或电报群组。我在 Stack Overflow 上搜索了一下,但没有找到任何有用的信息。我尝试着去实现,但我只能打开用户可以选择的所有 Messenger 应用,而不是电报或特定的电报群组或频道。我在 SF 上找到了这篇文章,但它并不能回答我的问题。
    Intent myIntent = new Intent(Intent.ACTION_SEND);
    myIntent.setType("text/plain");
    myIntent.setPackage(appName);
    myIntent.putExtra(Intent.EXTRA_TEXT, msg);//
    mUIActivity.startActivity(Intent.createChooser(myIntent, "Share with"));
6个回答

44

打开电报频道或用户的意图:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tg://resolve?domain=partsilicon"));
startActivity(intent);

5
同时,我们可以在意图中使用 http://www.telegram.me/groupname,当用户点击按钮时可以选择 Telegram。 - MBehtemam
我们能在这个链接上添加消息或文本吗? - itsmebil
3
请为上述解决方案添加try catch,否则如果Telegram应用程序未安装,则应用程序将崩溃。 - Ashwini

6

首先检查是否安装了Telegram客户端(Telegram Messenger或Telegram X)。如果没有,请在浏览器中打开。

fun telegramIntent(context: Context): Intent {
    var intent: Intent? = null
    try {
        try {
           context.packageManager.getPackageInfo("org.telegram.messenger", 0)//Check for Telegram Messenger App
        } catch (e : Exception){
           context.packageManager.getPackageInfo("org.thunderdog.challegram", 0)//Check for Telegram X App
        }
       intent = Intent(Intent.ACTION_VIEW, Uri.parse("tg://resolve?domain=${TELEGRAM_PAGE_ID}"))
    }catch (e : Exception){ //App not found open in browser
       intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://www.telegram.me/$TELEGRAM_PAGE_ID"))
    }
   return intent!!
}

1
“${TELEGRAM_PAGE_ID}”是一个电话号码还是其他什么? - Sergio
${TELEGRAM_PAGE_ID}指的是我们要打开的群组ID/频道ID。要查找频道ID,请打开任何Telegram频道,点击频道信息。您会发现一个链接,例如https://t.me/easyoffers,其中${TELEGRAM_PAGE_ID}将是easyoffers - Saurabh Padwekar
如果您想開啟一個對話而非群組,${TELEGRAM_PAGE_ID} 會是電話號碼嗎? - Sergio

5

@Saurabh Padwekar的回答很好,但我想说你可能需要像这样添加查询:需要为Android SDK 30+添加查询

<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="tg" />
    </intent>
</queries>

2
private void getTelegramInt(Context context) {

    Intent intent;

    try {
        try {
            context.getPackageManager().getPackageInfo("org.telegram.messenger", 0);
        } catch (PackageManager.NameNotFoundException e) {
            context.getPackageManager().getPackageInfo("org.thunderdog.challegram", 0);
        }
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tg://resolve?domain=dilshod_software"));
        startActivity(intent);

    } catch (PackageManager.NameNotFoundException e) {
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://t.me/dilshod_software"));
        startActivity(intent);
    }
}

我的按钮点击事件:

telegram_image.setOnClickListener(view1 -> getTelegramInt(this));

涉及IT技术,意为在单击telegram_image按钮时调用getTelegramInt函数并将当前上下文传递给它。


返回意图的逻辑是什么? - Abhishek Dutt

2

以下是@Saurabh Padwekar的答案的Java版本!

  Intent getTelegramInt(Context context) {
        Intent intent;
        try {
            try { // check for telegram app
                context.getPackageManager().getPackageInfo("org.telegram.messenger", 0);
            } catch (PackageManager.NameNotFoundException e) {
                // check for telegram X app
                context.getPackageManager().getPackageInfo("org.thunderdog.challegram", 0);
            }
            // set app Uri
            intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tg://resolve?domain=${TELEGRAM_PAGE_ID}"));
        } catch (PackageManager.NameNotFoundException e) {
            // set browser URI
            intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.telegram.me/$TELEGRAM_PAGE_ID"));
        }
        return intent;
    }

1
这将是一个更完整的答案:
try {
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(telegramLink));
     PackageManager pm = getPackageManager();
     if (intent.resolveActivity(pm) != null) {
          startActivity(intent);
     } else {
        Toast.makeText(context, "Error message", Toast.LENGTH_LONG).show();
     }
    } catch (Exception ignored) {
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接