Android和H5交互

Android與H5的交互比較簡單味咳,這里記錄一下。

WebView的基本設(shè)置
    WebSettings settings = wv.getSettings();
     //讓webView支持JS
     settings.setJavaScriptEnabled(true);




       //設(shè)置客戶端
        wv.setWebViewClient(new WebViewClient() {
            //覆寫shouldOverrideUrlLoading實(shí)現(xiàn)內(nèi)部顯示網(wǎng)頁
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            //頁面開始加載
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            //頁面加載完成
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
        });
        
      //設(shè)置這個客戶端檬嘀,可以設(shè)置加載網(wǎng)頁的進(jìn)度條(布局就不寫了槽驶,就是在WebView上面放一個ProgressBar)
        wv.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {

                if (null != mProgressBar1) {
                    if (newProgress == 100) {
                        mProgressBar1.setVisibility(View.GONE);//加載完網(wǎng)頁進(jìn)度條消失
                    } else {
                        mProgressBar1.setVisibility(View.VISIBLE);//開始加載網(wǎng)頁時顯示進(jìn)度條
                        mProgressBar1.setProgress(newProgress);//設(shè)置進(jìn)度值
                    }
                }
            }
        });
  
 //設(shè)置返回鍵動作(防止按返回鍵直接退出程序)
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (wv.canGoBack()) {//當(dāng)webview不是處于第一頁面時,返回上一個頁面
                wv.goBack();
                return true;
            } else {
                finish();
            }


        }
        return super.onKeyDown(keyCode, event);
    }   

//WebView加載本地網(wǎng)頁(H5本地頁面一般放在assets目錄下鸳兽,路徑: 如果html文件存于assets:則加前綴:file:///android_asset/     如果在Sdcard直接使用file:///sdcard/ or file:/sdcard也可以)  
 wv.loadUrl("file:///android_asset/xxx.html");

Android調(diào)用H5的方法
 //調(diào)用無參的Js方法,      括號里:“javascript:”  +  js方法名(H5里面定義的名稱)
 wv.loadUrl("javascript:message1()");   
//調(diào)用有參數(shù)的Js方法 掂铐,而且要注意,參數(shù)要加單引號
wv.loadUrl("javascript:message2('" + message+ "')");   
H5調(diào)用 Android的方法

1.建立內(nèi)部類揍异,在內(nèi)部類中增加Js要調(diào)用Android的方法全陨,需要增加注解

 public class JsClass {

        @JavascriptInterface
        public void toMessage( String id) {
           
        }
    }  


//將Android傳遞給Js (  "android" 表示在H5那邊要進(jìn)行調(diào)用方法的主體,例如:android.toMessage(id) )
wv.addJavascriptInterface(new JsClass(), "android");  

2.不需要建立內(nèi)部類衷掷,直接將自身傳遞過去辱姨,自身實(shí)現(xiàn)方法。
wv.addJavascriptInterface(this, "android");

優(yōu)化

WebView的自帶的JavascriptInterface的接口使用會有安全隱患戚嗅,使用JSBridge

H5調(diào)用Android另外一種方式:scheme

使用場景:一般用于在H5頁面中雨涛,點(diǎn)擊對應(yīng)的商品枢舶、廣告等,進(jìn)入App對應(yīng)的頁面

在功能清單文件中替久,對應(yīng)的Activity中設(shè)置相關(guān)參數(shù)
<activity android:name=".TestActivity">
            <intent-filter>
              //這里是對應(yīng)到H5頁面中鏈接里面寫的路徑(aa 是 scheme   host 是主機(jī)名稱  path 是路徑)
                <data android:scheme="abc" android:host="123" android:path="/path"/>
                //下面3個是固定的
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
        </activity>


//WebView中設(shè)置   
wv.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
              //通過對URl的解析來決定調(diào)轉(zhuǎn)到哪個頁面
                if (url.contains("aa")) {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                }
            }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凉泄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚯根,更是在濱河造成了極大的恐慌后众,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颅拦,死亡現(xiàn)場離奇詭異蒂誉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)矩距,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門拗盒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锥债,你說我怎么就攤上這事陡蝇。” “怎么了哮肚?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵登夫,是天一觀的道長。 經(jīng)常有香客問我允趟,道長恼策,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任潮剪,我火速辦了婚禮涣楷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抗碰。我一直安慰自己狮斗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布弧蝇。 她就那樣靜靜地躺著碳褒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪看疗。 梳的紋絲不亂的頭發(fā)上沙峻,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機(jī)與錄音两芳,去河邊找鬼摔寨。 笑死,一個胖子當(dāng)著我的面吹牛怖辆,可吹牛的內(nèi)容都是我干的祷肯。 我是一名探鬼主播沉填,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼佑笋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起斑鼻,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蒋纬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坚弱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜀备,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年荒叶,在試婚紗的時候發(fā)現(xiàn)自己被綠了碾阁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡些楣,死狀恐怖脂凶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愁茁,我是刑警寧澤蚕钦,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站鹅很,受9級特大地震影響嘶居,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜促煮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一邮屁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧菠齿,春花似錦佑吝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至襟士,卻和暖如春盗飒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背陋桂。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工逆趣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嗜历。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓宣渗,卻偏偏與公主長得像抖所,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子痕囱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容