android 端 H5 開發(fā)遇到相關問題匯總(未完待續(xù))

寫在前面

H5 是現(xiàn)在移動端開發(fā)的一個趨勢,可以使用同一套代碼在多個平臺進行運行,大大節(jié)省產(chǎn)品開發(fā)的工作量。但是,由于兼容性問題會有許多坑需要我們?nèi)ヌ?。本篇文章主要用來記?br> h5 開發(fā)在安卓上遇到的各種坑。
同時也歡迎大家進行補充
轉載注明原文地址:http://www.itdecent.cn/p/535df00c5e14

一、多媒體上傳

1.1 主要問題

1 安卓原生 WebView 不響應 input

2 選擇圖片之后圖片文件未回傳給H5界面

1.2 問題分析

H5 端上上傳代碼

<input type="file" name="file" accept="image/*" multiple="multiple" @change="onFileChange"
                       style="display: none;width:0;height:0"/>

問題1

實測在微信、QQ瀏覽器、UC瀏覽器上可打開文件選擇界面

image.png

而用安卓原生 WebView 上點擊上傳文件按鈕則無響應,說明瀏覽器在安卓本地對input標簽的事件響應做過處理
查看開源 android 瀏覽器源碼 https://github.com/scoute-dich/browser/blob/master/app/src/main/java/de/baumann/browser/fragments/Fragment_Browser.java 471行,發(fā)現(xiàn)需重寫 WebChromeClient 的 onShowFileChooser(android 5.0 以上)和 openFileChooser(android 4.1 - 4.4)方法,調出android的文件選擇器。

問題2

android 是通過 onReceiveValue 函數(shù)給 h5 端傳遞返回值的,而該方法的參數(shù)則是 URI,將 android 端給 h5 界面的 URI 打印出來是 “content://com.android.providers.media.documents/document/image%3A74097” 這種格式,從百度上的得知,有的 android 手機的 webview 無法解析 content 形式的 URI ,需要轉換成 file 開頭的格式,如“file:///storage/emulated/0/Pictures/Screenshots/S70914-21392512.jpg”,轉化成 file 格式的 URI 之后 h5 端成功解析,問題解決

二、百度地圖相關

2.1 主要問題

1 部分手機無法獲取到定位
2 百度地圖點擊事件在手機上無效,準確說是點多次才觸發(fā)一次

2.2 問題分析

問題1:部分手機無法獲取到定位

經(jīng)過百度搜素 h5 要獲取定位權限需要添加:

(1)添加定位權限

 <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

(2)設置 webview.setting

WebSettings settings = webview.getSettings();
settings.setGeolocationEnabled(true);//允許地理位置可用

(3)繼承 WebChromeClient 類并且重寫其 onGeolocationPermissionsShowPrompt 函數(shù)

class MyChromeViewClient extends WebChromeClient {
        public void onGeolocationPermissionsShowPrompt(final String origin, final android.webkit.GeolocationPermissions.Callback callback) {
            final boolean remember = true;
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("位置信息");
            builder.setMessage(origin + "允許獲取您的地理位置信息嗎?").setCancelable(true).setPositiveButton("允許",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                            int id) {
                            callback.invoke(origin, true, remember);
                        }
                    })
                    .setNegativeButton("不允許",
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog,
                                                    int id) {
                                    callback.invoke(origin, false, remember);
                                }
                            });
            AlertDialog alert = builder.create();
            alert.show();
        }
 }

這三步之后在大部分手機上 h5 的百度地圖就可以獲取到定位了,但是在 meizu 的 flyme 上去獲取不到,經(jīng)測試個版本的 flyme 均獲取不到,而與 flyme 相同 android 版本的其他手機上卻可以獲取到,因此猜測是 flyme 改寫 webview 的底層代碼。

最終采取的解決辦法是引入 tencent 的瀏覽服務,采用 QQ 瀏覽器的 webview 內(nèi)核替換原生的 webview ,替換后成功在魅族手機上獲取定位

騰訊TBS瀏覽服務
https://x5.tencent.com/tbs/

問題2:百度地圖點擊事件在手機上無效(多發(fā)生于 android 7.0 系統(tǒng))

經(jīng)過百度搜索,有人說是點擊事件和拖拽事件沖突了,果然屏蔽拖拽事件之后,點擊事件正常響應了,但是作為一個地圖界面,怎么能禁用拖拽事件?。?!
查看百度地圖的 api
http://lbsyun.baidu.com/cms/jsapi/class/jsapi_reference.html#a0b0
得知,百度地圖有專門針對移動端的 longpress 事件,因此用 longpress 事件替換 click 事件

如果各位有更好的辦法歡迎提出交流

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,234評論 25 708
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點贊按鈕進度條TabLayout圖標下拉刷新...
    皇小弟閱讀 47,170評論 22 665
  • 最近做了一個Android UI相關開源項目庫匯總,里面集合了OpenDigg 上的優(yōu)質的Android開源項目庫...
    OpenDigg閱讀 17,627評論 6 222
  • ⒊幾百年來,歷史學家相信即使龐培的人們在公元79年被維蘇威爆發(fā)的火山所困,但鄰近的赫庫蘭尼姆的人卻逃離。然后他們在...
    楊秀華閱讀 285評論 0 1
  • 婚前婚后兩張臉,婚前優(yōu)點成缺點! 婚前看到對方的優(yōu)點,在婚后都可能成了缺點。性格開朗外向的人在戀愛時喜歡上了一個內(nèi)...
    存愛SL共創(chuàng)未來閱讀 192評論 0 0

友情鏈接更多精彩內(nèi)容