Android與JS進行交互傳文件路徑


webview+h5這種混合開發最近很火,其中最重要的大概就是java代碼和js的交互了,剛接觸這東西兩天,寫寫收獲。

新建一個assets文件夾,要與res這個文件夾同級,其中存放web項目。

先看android端

初始化webview

 1 // 設置支持JavaScript等
 2         webView = (WebView) findViewById(R.id.webView);
 3         settings = webView.getSettings();
 4         settings.setJavaScriptEnabled(true);
 5         settings.setCacheMode(WebSettings.LOAD_DEFAULT);        //緩存
 6         settings.setDomStorageEnabled(true);                    //使用localStorage則必須打開
 7         settings.setDatabaseEnabled(true);
 8         settings.setAppCacheEnabled(true);
 9         settings.setAllowFileAccess(true);
10         settings.setSupportZoom(true);
11         settings.setBuiltInZoomControls(true);
12         settings.setRenderPriority(WebSettings.RenderPriority.HIGH);    //提高渲染優先級
13         settings.setBlockNetworkImage(false);                           //把圖片放在最后渲染
14         webView.setWebChromeClient(new WebChromeClient());
15 
16         webView.addJavascriptInterface(new Object() {
17             @JavascriptInterface
18             public void onUseCamera() {
19                 //use system camera
20                 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
21                 startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
22             }
23 
24         }, "camera");
25         webView.addJavascriptInterface(new Object() {
26 
27             @JavascriptInterface
28             public String onGetPic() {
29                 return file.getAbsolutePath();
30             }
31         }, "getPicture");
32         webView.loadUrl("file:///android_asset/login_content.html");

這里執行了點擊h5中的按鈕,調用系統相機的操作,onActivityResult就不寫了,網上一大堆,不過需要注意,onactivityResult中要有

webView.loadUrl("javascript:getPic(" + ")");這樣一句代碼

。其中名字為camera的javascrptInterface是調用照相機,getPicture的是返回照片路徑給js。

下面就是js了

1      function useCamera(){
2            window.camera.onUseCamera();
3         }
4         function getPic(){
5             var filePath = window.getPicture.onGetPic();
6             alert(filePath);
7             document.getElementById("testImage").src=filePath;
8         }

主要就是這樣的兩個方法,其中useCamera是要在html的button的onclick中調用,getPic是在上面的onActivityForResult中調用,通過文件路徑更改id是testImage的圖片。

這樣直接傳文件路徑在web項目部署在服務器時是訪問不到的,這個應該有解決方案,可惜我沒有找到。還有個問題待解決,傳一個string的文件路徑沒問題,但是如果直接傳File類型的文件時,js死活都識別不出文件來,目測應該用h5的FileReader進行操作,可惜我又沒成功。。。以上

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM