ACTION_CALL 意图,与 Linkify?

ACTION_CALL intent, with Linkify?

我有几个带有包含 phone 数字的 TextView 的活动。我需要的是,当用户点击一个时,phone 会拨打该号码。 "dial",我的意思是拨号,而不是调出预加载号码的拨号器,等待用户单击 "Dial"。

换句话说,我想要Intent.ACTION_CALL,而不是Intent.ACTION_DIAL。

请记住,我是 Android 开发的新手,我才刚刚开始弄清楚如何将它们组合在一起。

我的第一次尝试很简单。在我的 XML:

<TextView
    android:id="@+id/textPhoneNumber"
    android:text="@string/the_phone_number"
    android:autoLink="phone"
    android:clickable="true"
    android:onClick="clickPhone"
    />

然后在我的 java:

public void clickPhone(View view)
{
    String phoneNumber = getString(R.string.the_phone_number);
    Uri uri = Uri.parse("tel:" + phoneNumber);

    Intent callIntent = new Intent(Intent.ACTION_CALL);
    callIntent.setData(uri);
    startActivity(callIntent);
}

阅读了更多有关 autolink 应该如何工作的内容后,这显然比应有的工作要多,但它确实有效...

直到我不得不对包含字母的 phone 数字做同样的事情。你知道那种:1-800-BUY-MY-STUFF.

问题是,Linkify.PHONE_NUMBERS 无法将包含字母的字符串识别为 phone 数字,因此我的字符串不会呈现为 link。不过,onClick 仍会归档,而且我仍会得到我想要的行为。

因此,我深入研究了 autoLink 实际做了什么,并阅读了一些关于 Linkify 的内容,并删除了我的 onCLick 并尝试使用自定义模式:

Pattern matchEverything = Pattern.compile("^.*$");
TextView textPhoneNumber = (TextView)findViewById(R.id.textPhoneNumber);
Linkify.addLinks(textPhoneNumbermatchEverything, "tel:");

因为我的 TextView 只包含一个 phone 数字,我想我应该让 Regex 保持简单。这很好用。

除了我认为我得到的是 Intent.ACTION_DIAL 而不是 Intent.ACTION_CALL。

让 phone 号码显示在 Activity 中作为可点击的 link,并点击 link 拨打 [=51] 的最简单方法是什么=],而不只是调出拨号器?

您可以通过模拟相同的行为来跳过整个 linkify 业务:

使用SpannableString给TextView中的文本加下划线:

String udata="1-800-BUY-MY-STUFF";
SpannableString content = new SpannableString(udata);
content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);
mTextView.setText(content);

然后在XML中,将TextView的文本颜色设置为#05c5cf

之后就是调用你的 clickPhone 方法了。