2015-04-22 65 views
0

我有幾個活動與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的文本:

+0

Linkify應該提供Intent.ACTION_DIAL工具。所以這個主機應用程序根本不需要調用權限。如果您需要Linkify與Intent.ACTION_CALL,那麼您需要通過您自己的自定義代碼模擬Linkify行爲。 –

回答

1

您只需通過模擬相同的行爲跳過整個linkify業務

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方法的問題。

+0

終於開始嘗試了。似乎工作正常,但顏色是關閉的。我的鏈接是#35B6E5。什麼似乎最好的工作是mTextView.setTextColor(mTextView.getLinkTextColors()。getDefaultColor()); –