1. 程式人生 > >AgentWeb , 一個簡潔易用的 Android Web 庫

AgentWeb , 一個簡潔易用的 Android Web 庫

AgentWeb , 一個簡潔易用的 Android Web 庫


AgentWeb 介紹

AgentWeb 是一個高度封裝的 Android WebView ,簡單易用 , 帶有進度條 、 支援檔案上傳 、 下載 、 簡化 Javascript 通訊 ,加強 Web 安全的庫 。 App 下載體驗

前言

WebView 可謂是每個應用必備的一個控制元件了 ,但是談起它的使用 ,讓很多人都不是那麼喜歡它 ,比如說每個 Web 頁面都需要各種一大推的 setting ,好一點的可能封裝成一個 BaseWebActivity 和 BaseWebFragment ,但是重複的程式碼總是讓有潔癖的程式設計師不舒服 ,而且 WebView 本身功能也不是很完善 , AgentWeb 就泥補了這些空缺 。

AgentWeb 功能

  1. 支援進度條以及自定義進度條
  2. 支援檔案下載
  3. 支援檔案斷點續傳
  4. 支援下載通知形式提示進度
  5. 簡化 Javascript 通訊
  6. 支援返回事件處理
  7. 支援注入 Cookies
  8. WebView 安全

為什麼要使用 AgentWeb ?

七個字 ,簡潔易用體驗好 。 最重要的是 WebView 很多東西不支援呀 , 坑太多!

Web 檔案下載 檔案上傳 Js通訊 斷點續傳 使用簡易度 進度條 執行緒安全
WebView 不支援 不支援 支援 不支援 麻煩 沒有 不安全
AgentWeb 支援 支援 更簡潔 支援 簡潔 安全

簡潔易用

為什麼說它簡潔易用嗎 ? 下面京東商城效果圖 , 只需一句話 !

mAgentWeb = AgentWeb.with(this)//傳入Activity
                .setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//傳入AgentWeb 的父控制元件 ,如果父控制元件為 RelativeLayout , 那麼第二引數需要傳入 RelativeLayout.LayoutParams
                .useDefaultIndicator()// 使用預設進度條
                .defaultProgressBarColor() // 使用預設進度條顏色
                .setReceivedTitleCallback(mCallback) //設定 Web 頁面的 title 回撥
                .createAgentWeb()//
                .ready()
                .go("http://www.jd.com");

你沒看錯 ,裡面沒有一句 Setting , 甚至連 WebChromeClient 都不配置就有進度條 。

Javascript 通訊拼接太麻煩 ? 請看 。

//Javascript 方法
function callByAndroid(){
      console.log("callByAndroid")
  }

Android 端

mAgentWeb.getJsEntraceAccess().quickCallJs("callByAndroid");

結果

05-27 08:27:04.945 469-469/com.just.library.agentweb:web I/Info: consoleMessage:callByAndroid  lineNumber:27

京東商城效果圖


京東效果圖

到了這裡 , 弱弱問一句 , 你還有什麼理由不使用 AgentWeb ?

淺談進度條

為什麼要談一下進度條這個東西呢 ? 因為沒有進度條的 WebView 頁面體驗實在太差了 ,AgentWeb 預設的進度條是一般瀏覽器的進度條 ,為什麼採用這種進度條呢 ? 因為體驗好 ,微信和QQ ,支付寶 、 UC 以及 Safari 都採用這種進度條是有他們道理的 , 我還見過應用載入 Web 頁面的時候直接彈 Dialog 不可取消 ,這種噁心的做法 ,沒有非常必要讓使用者確定情況都別彈 Dialog ,特別在使用者網路不好的情況下 ,載入速度變得突奇的慢 ,那麼 Dialog 就一直存在 ,使用者耐性不好 ,只能把你程序殺死 。

Agentweb 檢視結構

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <WebView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </WebView>
         <!--進度條-->
        <com.just.library.BaseIndicatorView
            android:layout_width="match_parent"
            android:layout_height="2dp"
            >

        </com.just.library.BaseIndicatorView>
    </FrameLayout>

很清晰 AgentWeb 最外層是 FrameLayout , 所以在使用 AgentWeb 的時候還需要給 FrameLayout 指定父控制元件(下面有使用方式) 。

引入

  • Gradle

     compile 'com.just.agentweb:agentweb:1.2.6'
  • Maven

      <dependency>
         <groupId>com.just.agentweb</groupId>
         <artifactId>agentweb</artifactId>
        <version>1.0.3</version>
        <type>pom</type>
      </dependency>

用法

Activity 使用如下

mAgentWeb = AgentWeb.with(this)//傳入Activity
                .setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//傳入AgentWeb 的父控制元件 ,如果父控制元件為 RelativeLayout , 那麼第二引數需要傳入 RelativeLayout.LayoutParams
                .useDefaultIndicator()// 使用預設進度條
                .defaultProgressBarColor() // 使用預設進度條顏色
                .setReceivedTitleCallback(mCallback) //設定 Web 頁面的 title 回撥
                .createAgentWeb()//
                .ready()
                .go("http://www.jd.com");

Fragment 使用如下

@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mAgentWeb = AgentWeb.with(this.getActivity(), this)//這裡需要把 Activity 、 和 Fragment  同時傳入
                .setAgentWebParent((ViewGroup) view, new LinearLayout.LayoutParams(-1, -1))// 設定 AgentWeb 的父控制元件 , 這裡的view 是 LinearLayout , 那麼需要傳入 LinearLayout.LayoutParams
                .useDefaultIndicator()// 使用預設進度條
                .setReceivedTitleCallback(mCallback) //標題回撥
                .setSecurityType(AgentWeb.SecurityType.strict) //注意這裡開啟 strict 模式 , 裝置低於 4.2 情況下回把注入的 Js 全部清空掉 , 這裡推薦使用 onJsPrompt 通訊
                .createAgentWeb()//
                .ready()//
                .go(getUrl());

    }

混淆

-keep public class * extends android.webkit.WebChromeClient

總結

AgentWeb 是一個把 WebView 完全代理出來 , 脫離 Activity 、 Fragment xml 佈局 , Android Web 庫 。

轉載出處:https://github.com/Justson/AgentWeb