混合開發(fā)之打電話那點(diǎn)事兒

最近一個(gè)需求是要求在H5上調(diào)用Android的原生系統(tǒng)來進(jìn)行撥通電話的功能绰精,打電話 相信是應(yīng)用內(nèi)很常見的功能撒璧,簡單點(diǎn)就是一個(gè)Intent直接跳轉(zhuǎn)即可,本文給出2種方案笨使,供大家選擇參考卿樱,(文中會涉及到H5和ios的部分內(nèi)容)

方式一:

H5實(shí)現(xiàn)移動端打電話的功能,最常使用的 href 標(biāo)簽來實(shí)現(xiàn)移動端打電話阱表,代碼如下(就一行)

<a href="tel:13764567708">移動WEB頁面JS一鍵撥打號碼咨詢功能</a>

其中殿如,這里的數(shù)字就是具體的電話號碼贡珊,基于此H5開發(fā)會進(jìn)行方法的封裝調(diào)用(比如,傳入一個(gè)電話號碼等等)涉馁。

說完H5在回歸到Android门岔。眾所周知,Android使用Webview控件來加載H5烤送,由于打電話需要用到權(quán)限寒随,因此:

步驟一:

AndroidManifest.xml 清單配置文件,配置權(quán)限:

    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.INTERNET" />

前2個(gè)權(quán)限帮坚,第一個(gè)是讀取聯(lián)系人妻往,第二個(gè)是打電話的權(quán)限,前2個(gè)權(quán)限是危險(xiǎn)權(quán)限试和,因此要做 運(yùn)行時(shí)權(quán)限 的方案讯泣,運(yùn)行時(shí)權(quán)限的第三方庫已經(jīng)很多了,比較出名的有 RxPermissions阅悍、EasyPermissions等等好渠,根據(jù)自己需求去集成即可,這是實(shí)現(xiàn)打電話的第一步

步驟二:

由于方法一节视,H5的兄弟使用了href 標(biāo)簽拳锚,簡單點(diǎn)理解,href 屬性用于指定超鏈接目標(biāo)的 URL寻行,你可能會問霍掺,什么叫超鏈接?簡單理解拌蜘,超鏈接 在Android中就是在界面內(nèi)點(diǎn)擊某個(gè)控件進(jìn)入到另外一個(gè)界面(類似于跳轉(zhuǎn))杆烁。

在Webview中,WebViewClient有個(gè)方法重載拦坠,叫shouldOverrideUrlLoading( WebView view, String url )连躏,這個(gè)方法主要是用來,在網(wǎng)頁上進(jìn)行超鏈接的時(shí)候進(jìn)行記錄贞滨,這里的形參url代表的就是界面跳轉(zhuǎn)具體的url入热,

因此,針對這種標(biāo)簽晓铆,實(shí)現(xiàn)打電話的代碼如下:

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            //對應(yīng)上面的href tel:標(biāo)簽勺良,代碼如下
            if (url.startsWith("tel:")){
                Uri parse = Uri.parse(url);
                String s = parse.toString();
              //構(gòu)建Intent
                Intent intent = new Intent(Intent.ACTION_VIEW,
                        Uri.parse(url));
              // 進(jìn)行跳轉(zhuǎn)
                view.getContext().startActivity(intent);
                return true;
            }else {
              //不滿足打電話的條件,直接加載url
                view.loadUrl(url);
                Log.i("info", "shouldOverrideUrlLoading: url : "+url);
                return true;
            }

構(gòu)建完自定義的WebChromeClient骄噪,接著尚困,調(diào)用 setWebChromeClient(chromeClient);即可完成打電話的功能

總結(jié):方式一 使用的是對超鏈接進(jìn)行攔截判斷的方法,符合打電話的條件則進(jìn)行跳轉(zhuǎn)链蕊,不符合條件的則直接加載url事甜,那么谬泌,接下來介紹的方式二略有不同

方式二:

在ios加載url上,出現(xiàn)一個(gè)奇怪的現(xiàn)象逻谦,同樣的超鏈接掌实,在ios那邊,居然要進(jìn)行這樣的判斷(下面是偽代碼:按照Android的邏輯來表達(dá)ios的邏輯):

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            //注意:ios這里有 // 兩個(gè)斜杠邦马,但是寫在Android中是不行的
            if (url.startsWith("tel://")){
          
              //ios的邏輯...
                return true;
            }else {
                view.loadUrl(url);
                Log.i("info", "shouldOverrideUrlLoading: url : "+url);
                return true;
            }

因?yàn)楹笈_的超鏈接給的是

 tel:13333333222

Android如果按照ios的寫法贱鼻,那就有問題了(具體原因也不是很清楚,畢竟該現(xiàn)象是ios朋友口述的)滋将。好了邻悬,你可能會說,ios跟Android寫不一樣的代碼即可呀随闽,怎么實(shí)現(xiàn)我不管父丰,效果出來就行。但橱脸、在一些有技術(shù)強(qiáng)迫癥的公司础米,領(lǐng)導(dǎo)的口號那要求是 三端統(tǒng)一 (三端統(tǒng)一實(shí)際上根本就是大笑話),針對這種情況添诉,就要用到Android與H5互相調(diào)用了。關(guān)于Android和H5的互相調(diào)用医寿,網(wǎng)上的資料已經(jīng)很多了栏赴,下面就直接上代碼:

//H5與Android互相調(diào)用
public class H5CallAndroid {

    //可以將這個(gè)類 直接寫在Activity或者自定義的Webview中
    //也可以通過構(gòu)造傳入Context
    Context context;

    public H5CallAndroid(Context context) {
        this.context = context;
    }

    @JavascriptInterface
    public void callPhone(String phoneNumber) {
        //step-1:檢查危險(xiǎn)權(quán)限 這里不給出代碼
        // checkPermissions( )

        //step-1:調(diào)用系統(tǒng)的打電話
        if (phoneNumber !=null && !TextUtils.isEmpty(phoneNumber)){
            Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(phoneNumber));
            context.startActivity(intent);
        }else {
            //自己做處理
        }

    }

}

接著,在Webview中增加這個(gè)對象的引入靖秩,讓該對象支持和H5互相調(diào)用

    Webview.addJavascriptInterface(new H5CallAndroid( ),"android");

那么须眷,H5的代碼(偽代碼)如下:

function callAndroidPhone(phoneNumber) {
//調(diào)用Android原生的方法
      var result = window.android.callPhone(phoneNumber);
     
}

以上兩種方式都可以實(shí)現(xiàn)打電話的功能!

如果這篇文章對您有開發(fā)or學(xué)習(xí)上的些許幫助沟突,希望各位看官留下寶貴的star花颗,謝謝。

Ps:著作權(quán)歸作者所有,轉(zhuǎn)載請注明作者, 商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)惠拭,非商業(yè)轉(zhuǎn)載請注明出處(開頭或結(jié)尾請?zhí)砑愚D(zhuǎn)載出處扩劝,添加原文url地址),文章請勿濫用,也希望大家尊重筆者的勞動成果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市职辅,隨后出現(xiàn)的幾起案子棒呛,更是在濱河造成了極大的恐慌,老刑警劉巖域携,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件簇秒,死亡現(xiàn)場離奇詭異,居然都是意外死亡秀鞭,警方通過查閱死者的電腦和手機(jī)趋观,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門扛禽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人皱坛,你說我怎么就攤上這事旋圆。” “怎么了麸恍?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵灵巧,是天一觀的道長。 經(jīng)常有香客問我抹沪,道長刻肄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任融欧,我火速辦了婚禮敏弃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘噪馏。我一直安慰自己麦到,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布欠肾。 她就那樣靜靜地躺著瓶颠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刺桃。 梳的紋絲不亂的頭發(fā)上粹淋,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音瑟慈,去河邊找鬼桃移。 笑死,一個(gè)胖子當(dāng)著我的面吹牛葛碧,可吹牛的內(nèi)容都是我干的借杰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼进泼,長吁一口氣:“原來是場噩夢啊……” “哼蔗衡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缘琅,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤粘都,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后刷袍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翩隧,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堆生。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片专缠。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淑仆,靈堂內(nèi)的尸體忽然破棺而出涝婉,到底是詐尸還是另有隱情,我是刑警寧澤蔗怠,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布墩弯,位于F島的核電站,受9級特大地震影響寞射,放射性物質(zhì)發(fā)生泄漏渔工。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一桥温、第九天 我趴在偏房一處隱蔽的房頂上張望引矩。 院中可真熱鬧,春花似錦侵浸、人聲如沸旺韭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽区端。三九已至,卻和暖如春履腋,著一層夾襖步出監(jiān)牢的瞬間珊燎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工遵湖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晚吞。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓延旧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親槽地。 傳聞我的和親對象是個(gè)殘疾皇子迁沫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355