我有幾個活動與TextViews包含電話號碼。我需要的是,當用戶點擊其中一個時,電話會撥打該號碼。而「撥號」是指撥號,而不是帶有預先撥號的撥號器,等待用戶點擊「撥號」。ACTION_CALL意圖,與Linkify?
換句話說,我想要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);
}
已經閱讀更多關於自動連接應該如何工作,這比應該是必要的顯然更多的工作,但它確實工作...
直到我必須對包含字母的電話號碼做同樣的操作。你知道那種:1-800-BUY-MY-STUFF。
問題是,Linkify.PHONE_NUMBERS不能識別包含字母的字符串作爲電話號碼,所以我的字符串不會被渲染爲鏈接。儘管如此,onClick仍然會存檔,而且我仍然會得到我想要的行爲。
於是,我又挖成什麼自動鏈接實際上做了,並且閱讀了關於Linkify了一下,除去我的onclick並試圖用一個自定義模式:
Pattern matchEverything = Pattern.compile("^.*$");
TextView textPhoneNumber = (TextView)findViewById(R.id.textPhoneNumber);
Linkify.addLinks(textPhoneNumbermatchEverything, "tel:");
由於我的TextView只包含一個電話號碼,我想我會保持正則表達式的簡單。這工作得很好。
除了我認爲我得到Intent.ACTION_DIAL而不是Intent.ACTION_CALL。
將電話號碼作爲可點擊鏈接顯示在活動中,以及點擊該鏈接撥打電話而不是撥打撥號程序的最簡單方法是什麼?
使用SpannableString強調在TextView的文本:
Linkify應該提供Intent.ACTION_DIAL工具。所以這個主機應用程序根本不需要調用權限。如果您需要Linkify與Intent.ACTION_CALL,那麼您需要通過您自己的自定義代碼模擬Linkify行爲。 –