精华内容
下载资源
问答
  • 由于调用系统默认浏览器下载更新,造成用户体验非常不好,所以决定在webview中直接下载系统更新。然后直接安装。 由于要下载,所以必须用webview,联网权限这里说了,直接写在manifafest中。 我们经常使用的...

    由于调用系统默认浏览器下载更新,造成用户体验非常不好,所以决定在webview中直接下载系统更新。然后直接安装。

    由于要下载,所以必须用webview,联网权限这里不说了,直接写在manifafest中。

    我们经常使用的下载都是调用Android默认浏览器 这样写


     1、设置WebView的DownloadListener:

        webView.setDownloadListener(new MyWebViewDownLoadListener());

        2、实现MyWebViewDownLoadListener这个类,详细能够例如以下这样:    

    [java] view plaincopy
    1. private class MyWebViewDownLoadListener implements DownloadListener {  
    2.   
    3.         @Override  
    4.         public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,  
    5.                                     long contentLength) {  
    6.             Uri uri = Uri.parse(url);  
    7.             Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
    8.             startActivity(intent);  
    9.         }  
    10.   
    11.     }  


    为了直接下载,

    Sample:

    java代码:

      

    public class zwebxiazai extends Activity {
       
     WebView webView;
       
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            this.webView=(WebView) this.findViewById(R.id.webview);
            this.webView.getSettings().setSupportZoom(false);
            this.webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
            this.webView.loadUrl("http://a.zntx.cc/");
            this.webView.setWebViewClient(new WebViewClientDemo());
            webView.setDownloadListener(new DownloadListener() {
                public void onDownloadStart(String url, String userAgent,
                                String contentDisposition, String mimetype,
                                long contentLength) {
                        //实现下载的代码
                                              Uri uri = Uri.parse(url);
               Intent intent = new Intent(Intent.ACTION_VIEW,uri);
                        startActivity(intent);
                }
        });


        }
      private class WebViewClientDemo extends WebViewClient {
        @Override
        // 在WebView中而不是默认浏览器中显示页面
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
         view.loadUrl(url);
          return true;
         }

         

        }
      }

     


    main.xml代码:

    <?

    xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        />
    <WebView android:id="@+id/webview" android:layout_width="fill_parent"
        android:layout_height="0dip" android:layout_weight="1" />


    </LinearLayout>

    在AndroidManifest.xml中增加訪问internet的权限:

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


    Sample2   这个比較具体  

    WebView控制调用对应的WEB页面进行展示。当碰到页面有下载链接的时候,点击上去是一点反应都没有的。

    原来是由于WebView默认没有开启文件下载的功能。假设要实现文件下载的功能。须要设置WebView的DownloadListener,通过实现自己的DownloadListener来实现文件的下载。详细操作例如以下: 

    1、设置WebView的DownloadListener: 
        webView.setDownloadListener(new MyWebViewDownLoadListener()); 

    2、实现MyWebViewDownLoadListener这个类,详细能够例如以下这样:  

    Java代码 复制代码 收藏代码
    1. private class MyWebViewDownLoadListener implements DownloadListener{   
    2.   
    3.         @Override  
    4.         public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,   
    5.                                     long contentLength) {              
    6.             Log.i("tag""url="+url);              
    7.             Log.i("tag""userAgent="+userAgent);   
    8.             Log.i("tag""contentDisposition="+contentDisposition);            
    9.             Log.i("tag""mimetype="+mimetype);   
    10.             Log.i("tag""contentLength="+contentLength);   
    11.             Uri uri = Uri.parse(url);   
    12.             Intent intent = new Intent(Intent.ACTION_VIEW, uri);   
    13.             startActivity(intent);              
    14.         }   
    15.     }  
    [java] view plaincopy
    1. private class MyWebViewDownLoadListener implements DownloadListener{  
    2.   
    3.         @Override  
    4.         public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,  
    5.                                     long contentLength) {             
    6.             Log.i("tag""url="+url);             
    7.             Log.i("tag""userAgent="+userAgent);  
    8.             Log.i("tag""contentDisposition="+contentDisposition);           
    9.             Log.i("tag""mimetype="+mimetype);  
    10.             Log.i("tag""contentLength="+contentLength);  
    11.             Uri uri = Uri.parse(url);  
    12.             Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
    13.             startActivity(intent);             
    14.         }  
    15.     }  

      这仅仅是调用系统中已经内置的浏览器进行下载,还没有WebView本身进行的文件下载。只是,这也基本上满足我们的应用场景了。 

    我在项目中的运用 
    项目要求这样: 
    1,须要使用WebView载入一个网页。 
    2。网页中有文件下载的链接,点击后须要下载文件到SDcard; 
    3。然后自己主动打开文件; 
    以下是详细解决的方法 
    第一步。对WebView进行一系列设置。 

    Java代码 复制代码 收藏代码
    1. WebView webview=(WebView)layout.findViewById(R.id.webview);   
    2.                 webview.getSettings().setJavaScriptEnabled(true);   
    3.                 webview.setWebChromeClient(new MyWebChromeClient());   
    4.                 webview.requestFocus();   
    5. //              webview.loadUrl("file:///android_asset/risktest.html");   
    6.                 webview.loadUrl(jcrs_sub.get(position).addr);   
    7.                 // 设置web视图client   
    8.                 webview.setWebViewClient(new MyWebViewClient());   
    9.                 webview.setDownloadListener(new MyWebViewDownLoadListener());   
    10.   
    11. //内部类   
    12. public class MyWebViewClient extends WebViewClient {   
    13.         // 假设页面中链接,假设希望点击链接继续在当前browser中响应,   
    14.         // 而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。   
    15.         public boolean shouldOverviewUrlLoading(WebView view, String url) {   
    16.             L.i("shouldOverviewUrlLoading");   
    17.             view.loadUrl(url);   
    18.             return true;   
    19.         }   
    20.   
    21.         public void onPageStarted(WebView view, String url, Bitmap favicon) {   
    22.             L.i("onPageStarted");   
    23.             showProgress();   
    24.         }   
    25.   
    26.         public void onPageFinished(WebView view, String url) {   
    27.             L.i("onPageFinished");   
    28.             closeProgress();   
    29.         }   
    30.   
    31.         public void onReceivedError(WebView view, int errorCode,   
    32.                 String description, String failingUrl) {   
    33.             L.i("onReceivedError");   
    34.             closeProgress();   
    35.         }   
    36.     }   
    37.   
    38. // 假设不做不论什么处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身。   
    39.     // 假设希望浏览的网 页回退而不是推出浏览器,须要在当前Activity中处理并消费掉该Back事件。   
    40.     public boolean onKeyDown(int keyCode, KeyEvent event) {   
    41.         // if((keyCode==KeyEvent.KEYCODE_BACK)&&webview.canGoBack()){   
    42.         // webview.goBack();   
    43.         // return true;   
    44.         // }   
    45.         return false;   
    46.     }  
    [java] view plaincopy
    1. WebView webview=(WebView)layout.findViewById(R.id.webview);  
    2.                 webview.getSettings().setJavaScriptEnabled(true);  
    3.                 webview.setWebChromeClient(new MyWebChromeClient());  
    4.                 webview.requestFocus();  
    5. //              webview.loadUrl("file:///android_asset/risktest.html");  
    6.                 webview.loadUrl(jcrs_sub.get(position).addr);  
    7.                 // 设置web视图client  
    8.                 webview.setWebViewClient(new MyWebViewClient());  
    9.                 webview.setDownloadListener(new MyWebViewDownLoadListener());  
    10.   
    11. //内部类  
    12. public class MyWebViewClient extends WebViewClient {  
    13.         // 假设页面中链接,假设希望点击链接继续在当前browser中响应。  
    14.         // 而不是新开Android的系统browser中响应该链接。必须覆盖 webview的WebViewClient对象。  
    15.         public boolean shouldOverviewUrlLoading(WebView view, String url) {  
    16.             L.i("shouldOverviewUrlLoading");  
    17.             view.loadUrl(url);  
    18.             return true;  
    19.         }  
    20.   
    21.         public void onPageStarted(WebView view, String url, Bitmap favicon) {  
    22.             L.i("onPageStarted");  
    23.             showProgress();  
    24.         }  
    25.   
    26.         public void onPageFinished(WebView view, String url) {  
    27.             L.i("onPageFinished");  
    28.             closeProgress();  
    29.         }  
    30.   
    31.         public void onReceivedError(WebView view, int errorCode,  
    32.                 String description, String failingUrl) {  
    33.             L.i("onReceivedError");  
    34.             closeProgress();  
    35.         }  
    36.     }  
    37.   
    38. // 假设不做不论什么处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身。  
    39.     // 假设希望浏览的网 页回退而不是推出浏览器,须要在当前Activity中处理并消费掉该Back事件。  
    40.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
    41.         // if((keyCode==KeyEvent.KEYCODE_BACK)&&webview.canGoBack()){  
    42.         // webview.goBack();  
    43.         // return true;  
    44.         // }  
    45.         return false;  
    46.     }  


    第二步。起线程開始下载文件。 
    Java代码 复制代码 收藏代码
    1. //内部类   
    2. private class MyWebViewDownLoadListener implements DownloadListener {   
    3.   
    4.         @Override  
    5.         public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,   
    6.                                     long contentLength) {   
    7.             if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){   
    8.                 Toast t=Toast.makeText(mContext, "须要SD卡。", Toast.LENGTH_LONG);   
    9.                 t.setGravity(Gravity.CENTER, 00);   
    10.                 t.show();   
    11.                 return;   
    12.             }   
    13.             DownloaderTask task=new DownloaderTask();   
    14.             task.execute(url);   
    15.         }   
    16.   
    17.     }   
    18.     //内部类   
    19.     private class DownloaderTask extends AsyncTask<String, Void, String> {    
    20.   
    21.         public DownloaderTask() {    
    22.         }   
    23.   
    24.         @Override  
    25.         protected String doInBackground(String... params) {   
    26.             // TODO Auto-generated method stub   
    27.             String url=params[0];   
    28. //          Log.i("tag", "url="+url);   
    29.             String fileName=url.substring(url.lastIndexOf("/")+1);   
    30.             fileName=URLDecoder.decode(fileName);   
    31.             Log.i("tag""fileName="+fileName);   
    32.                
    33.             File directory=Environment.getExternalStorageDirectory();   
    34.             File file=new File(directory,fileName);   
    35.             if(file.exists()){   
    36.                 Log.i("tag""The file has already exists.");   
    37.                 return fileName;   
    38.             }   
    39.             try {     
    40.                 HttpClient client = new DefaultHttpClient();     
    41. //                client.getParams().setIntParameter("http.socket.timeout",3000);//设置超时  
    42.                 HttpGet get = new HttpGet(url);     
    43.                 HttpResponse response = client.execute(get);   
    44.                 if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){   
    45.                     HttpEntity entity = response.getEntity();   
    46.                     InputStream input = entity.getContent();   
    47.                        
    48.                     writeToSDCard(fileName,input);   
    49.                        
    50.                     input.close();   
    51. //                  entity.consumeContent();   
    52.                     return fileName;     
    53.                 }else{   
    54.                     return null;   
    55.                 }   
    56.             } catch (Exception e) {     
    57.                 e.printStackTrace();   
    58.                 return null;   
    59.             }   
    60.         }   
    61.   
    62.         @Override  
    63.         protected void onCancelled() {   
    64.             // TODO Auto-generated method stub   
    65.             super.onCancelled();   
    66.         }   
    67.   
    68.         @Override  
    69.         protected void onPostExecute(String result) {   
    70.             // TODO Auto-generated method stub   
    71.             super.onPostExecute(result);   
    72.             closeProgressDialog();   
    73.             if(result==null){   
    74.                 Toast t=Toast.makeText(mContext, "连接错误!

      请稍后再试!

      "

      , Toast.LENGTH_LONG);   
    75.                 t.setGravity(Gravity.CENTER, 00);   
    76.                 t.show();   
    77.                 return;   
    78.             }   
    79.                
    80.             Toast t=Toast.makeText(mContext, "已保存到SD卡。", Toast.LENGTH_LONG);   
    81.             t.setGravity(Gravity.CENTER, 00);   
    82.             t.show();   
    83.             File directory=Environment.getExternalStorageDirectory();   
    84.             File file=new File(directory,result);   
    85.             Log.i("tag""Path="+file.getAbsolutePath());   
    86.                
    87.             Intent intent = getFileIntent(file);   
    88.                
    89.             startActivity(intent);   
    90.                    
    91.         }   
    92.   
    93.         @Override  
    94.         protected void onPreExecute() {   
    95.             // TODO Auto-generated method stub   
    96.             super.onPreExecute();   
    97.             showProgressDialog();   
    98.         }   
    99.   
    100.         @Override  
    101.         protected void onProgressUpdate(Void... values) {   
    102.             // TODO Auto-generated method stub   
    103.             super.onProgressUpdate(values);   
    104.         }    
    105.   
    106.            
    107.     }   
    [java] view plaincopy
    1. //内部类  
    2. private class MyWebViewDownLoadListener implements DownloadListener {  
    3.   
    4.         @Override  
    5.         public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,  
    6.                                     long contentLength) {  
    7.             if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){  
    8.                 Toast t=Toast.makeText(mContext, "须要SD卡。", Toast.LENGTH_LONG);  
    9.                 t.setGravity(Gravity.CENTER, 00);  
    10.                 t.show();  
    11.                 return;  
    12.             }  
    13.             DownloaderTask task=new DownloaderTask();  
    14.             task.execute(url);  
    15.         }  
    16.   
    17.     }  
    18.     //内部类  
    19.     private class DownloaderTask extends AsyncTask<String, Void, String> {   
    20.   
    21.         public DownloaderTask() {   
    22.         }  
    23.   
    24.         @Override  
    25.         protected String doInBackground(String... params) {  
    26.             // TODO Auto-generated method stub  
    27.             String url=params[0];  
    28. //          Log.i("tag", "url="+url);  
    29.             String fileName=url.substring(url.lastIndexOf("/")+1);  
    30.             fileName=URLDecoder.decode(fileName);  
    31.             Log.i("tag""fileName="+fileName);  
    32.               
    33.             File directory=Environment.getExternalStorageDirectory();  
    34.             File file=new File(directory,fileName);  
    35.             if(file.exists()){  
    36.                 Log.i("tag""The file has already exists.");  
    37.                 return fileName;  
    38.             }  
    39.             try {    
    40.                 HttpClient client = new DefaultHttpClient();    
    41. //                client.getParams().setIntParameter("http.socket.timeout",3000);//设置超时  
    42.                 HttpGet get = new HttpGet(url);    
    43.                 HttpResponse response = client.execute(get);  
    44.                 if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){  
    45.                     HttpEntity entity = response.getEntity();  
    46.                     InputStream input = entity.getContent();  
    47.                       
    48.                     writeToSDCard(fileName,input);  
    49.                       
    50.                     input.close();  
    51. //                  entity.consumeContent();  
    52.                     return fileName;    
    53.                 }else{  
    54.                     return null;  
    55.                 }  
    56.             } catch (Exception e) {    
    57.                 e.printStackTrace();  
    58.                 return null;  
    59.             }  
    60.         }  
    61.   
    62.         @Override  
    63.         protected void onCancelled() {  
    64.             // TODO Auto-generated method stub  
    65.             super.onCancelled();  
    66.         }  
    67.   
    68.         @Override  
    69.         protected void onPostExecute(String result) {  
    70.             // TODO Auto-generated method stub  
    71.             super.onPostExecute(result);  
    72.             closeProgressDialog();  
    73.             if(result==null){  
    74.                 Toast t=Toast.makeText(mContext, "连接错误。请稍后再试!", Toast.LENGTH_LONG);  
    75.                 t.setGravity(Gravity.CENTER, 00);  
    76.                 t.show();  
    77.                 return;  
    78.             }  
    79.               
    80.             Toast t=Toast.makeText(mContext, "已保存到SD卡。

      "

      , Toast.LENGTH_LONG);  
    81.             t.setGravity(Gravity.CENTER, 00);  
    82.             t.show();  
    83.             File directory=Environment.getExternalStorageDirectory();  
    84.             File file=new File(directory,result);  
    85.             Log.i("tag""Path="+file.getAbsolutePath());  
    86.               
    87.             Intent intent = getFileIntent(file);  
    88.               
    89.             startActivity(intent);  
    90.                   
    91.         }  
    92.   
    93.         @Override  
    94.         protected void onPreExecute() {  
    95.             // TODO Auto-generated method stub  
    96.             super.onPreExecute();  
    97.             showProgressDialog();  
    98.         }  
    99.   
    100.         @Override  
    101.         protected void onProgressUpdate(Void... values) {  
    102.             // TODO Auto-generated method stub  
    103.             super.onProgressUpdate(values);  
    104.         }   
    105.   
    106.           
    107.     }   

    第三步,实现一些工具方法。 
    Java代码 复制代码 收藏代码
    1. private ProgressDialog mDialog;   
    2.     private void showProgressDialog(){   
    3.         if(mDialog==null){   
    4.             mDialog = new ProgressDialog(mContext);     
    5.             mDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//设置风格为圆形进度条     
    6.             mDialog.setMessage("正在载入 ,请等待...");     
    7.             mDialog.setIndeterminate(false);//设置进度条是否为不明白     
    8.             mDialog.setCancelable(true);//设置进度条能否够按退回键取消     
    9.             mDialog.setCanceledOnTouchOutside(false);   
    10.             mDialog.setOnDismissListener(new OnDismissListener() {   
    11.                    
    12.                 @Override  
    13.                 public void onDismiss(DialogInterface dialog) {   
    14.                     // TODO Auto-generated method stub   
    15.                     mDialog=null;   
    16.                 }   
    17.             });   
    18.             mDialog.show();   
    19.                
    20.         }   
    21.     }   
    22.     private void closeProgressDialog(){   
    23.         if(mDialog!=null){   
    24.             mDialog.dismiss();   
    25.             mDialog=null;   
    26.         }   
    27.     }   
    28.      public Intent getFileIntent(File file){   
    29. //       Uri uri = Uri.parse("http://m.ql18.com.cn/hpf10/1.pdf");   
    30.         Uri uri = Uri.fromFile(file);   
    31.         String type = getMIMEType(file);   
    32.         Log.i("tag""type="+type);   
    33.         Intent intent = new Intent("android.intent.action.VIEW");   
    34.         intent.addCategory("android.intent.category.DEFAULT");   
    35.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
    36.         intent.setDataAndType(uri, type);   
    37.         return intent;   
    38.       }   
    39.         
    40.     public void writeToSDCard(String fileName,InputStream input){   
    41.            
    42.         if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){   
    43.             File directory=Environment.getExternalStorageDirectory();   
    44.             File file=new File(directory,fileName);   
    45. //          if(file.exists()){   
    46. //              Log.i("tag", "The file has already exists.");   
    47. //              return;   
    48. //          }   
    49.             try {   
    50.                 FileOutputStream fos = new FileOutputStream(file);   
    51.                 byte[] b = new byte[2048];   
    52.                 int j = 0;   
    53.                 while ((j = input.read(b)) != -1) {   
    54.                     fos.write(b, 0, j);   
    55.                 }   
    56.                 fos.flush();   
    57.                 fos.close();   
    58.             } catch (FileNotFoundException e) {   
    59.                 // TODO Auto-generated catch block   
    60.                 e.printStackTrace();   
    61.             } catch (IOException e) {   
    62.                 // TODO Auto-generated catch block   
    63.                 e.printStackTrace();   
    64.             }   
    65.         }else{   
    66.             Log.i("tag""NO SDCard.");   
    67.         }   
    68.     }   
    69.        
    70.     private String getMIMEType(File f){      
    71.       String type="";     
    72.       String fName=f.getName();     
    73.       /* 取得扩展名 */     
    74.       String end=fName.substring(fName.lastIndexOf(".")+1,fName.length()).toLowerCase();   
    75.          
    76.       /* 依扩展名的类型决定MimeType */  
    77.       if(end.equals("pdf")){   
    78.           type = "application/pdf";//   
    79.       }   
    80.       else if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")||     
    81.       end.equals("xmf")||end.equals("ogg")||end.equals("wav")){     
    82.         type = "audio/*";      
    83.       }     
    84.       else if(end.equals("3gp")||end.equals("mp4")){     
    85.         type = "video/*";     
    86.       }     
    87.       else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||     
    88.       end.equals("jpeg")||end.equals("bmp")){     
    89.         type = "image/*";     
    90.       }     
    91.       else if(end.equals("apk")){      
    92.         /* android.permission.INSTALL_PACKAGES */      
    93.         type = "application/vnd.android.package-archive";    
    94.       }   
    95. //      else if(end.equals("pptx")||end.equals("ppt")){   
    96. //        type = "application/vnd.ms-powerpoint";    
    97. //      }else if(end.equals("docx")||end.equals("doc")){   
    98. //        type = "application/vnd.ms-word";   
    99. //      }else if(end.equals("xlsx")||end.equals("xls")){   
    100. //        type = "application/vnd.ms-excel";   
    101. //      }   
    102.       else{   
    103. //        /*假设无法直接打开,就跳出软件列表给用户选择 */     
    104.         type="*/*";   
    105.       }   
    106.       return type;   
    107.     }   

    转载于:https://www.cnblogs.com/gavanwanggw/p/6971582.html

    展开全文
  • 更新android webview

    2020-01-14 10:44:31
    在为客户做安卓系统定制开发时发现系统自带的浏览器会有一些小问题比如下拉框的选项点到,滚动时卡顿。浏览器在apk中内置了webview,一般非浏览器app中使用的webview可以使用第三方的,也可以使用sdk自带的,如果...

    在为客户做安卓系统定制开发时发现系统自带的浏览器会有一些小问题比如下拉框的选项点不到,滚动时卡顿。浏览器在apk中内置了webview,一般非浏览器app中使用的webview可以使用第三方的,也可以使用sdk自带的,如果使用sdk中的webview版本就会调用android system webview,adb环境下可以通过
    adb shell am start -a android.intent.action.VIEW -d  https://liulanmi.com/labs/core.html  来查看webview版本。

    android4.4以后,webview独立出了成为了一个系统apk,在/system/app/下,包名是com.android.webview,然后配置文件中包含了系统默认webview的包名,修改该默认包名,就可以替换System webview
    修改:
    从google商店下载最新的google webview替换系统里面预装的System webview
    apk路径:external\chromium-webview\prebuilt
    根据芯片架构替换不同目录下的apk
    然后修改/frameworks/base下的配置
    diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
    old mode 100644
    new mode 100755
    index 7baed78..f047834
    --- a/core/res/res/values/config.xml
    +++ b/core/res/res/values/config.xml
    @@ -2709,5 +2709,5 @@
             If review is not required, permissions are reviewed before the app
             is installed. -->
        <bool name="config_permissionReviewRequired">false</bool>
    +    <string name="config_webViewPackageName" translatable="false">com.google.android.webview</string>
    </resources>
    diff --git a/core/res/res/xml/config_webview_packages.xml b/core/res/res/xml/config_webview_packages.xml
    old mode 100644
    new mode 100755
    index f062b59..961b5d9
    --- a/core/res/res/xml/config_webview_packages.xml
    +++ b/core/res/res/xml/config_webview_packages.xml
    @@ -16,6 +16,7 @@
    <webviewproviders>
        <!-- The default WebView implementation -->
    -    <webviewprovider description="Android WebView" packageName="com.android.webview" availableByDefault="true">
    +  <webviewprovider description="Android WebView" packageName="com.google.android.webview" availableByDefault="true">

    展开全文
  • 1.先查看系统webview版本 adb可以使用情况下,linux环境输入: adb shell am start -a android.intent.action.VIEW -d https://liulanmi.com/labs/core.html 安卓显示界面会有浏览器界面弹出来显示当前webview...

    平台RK3368,安卓6.0,64位系统  把webview内核更新成google最新的chrome内核 

    1.先查看系统webview版本

    adb可以使用情况下,linux环境输入:

    adb shell am start -a android.intent.action.VIEW -d  https://liulanmi.com/labs/core.html

    安卓显示界面会有浏览器界面弹出来显示当前webview版本如图所示,这个是比较老的版本,现在都是80+以上的了;或者不方便,在安卓浏览器输入https://liulanmi.com/labs/core.html 查看也可以,前提是安卓系统先接上外网;

    2.下载比较新的webview版本

    翻墙出去 Google个版本Webview下载
     

    借用下别人家的图片,绿框为一般注意事项,红框为特别注意事项,然后选个时间比较靠近现在时间的就OK,下载;

    另:如果不好翻墙,可以使用我下载好的apk,Android5.0以上都可以使用,兼容arm64-v8a和arm64-v7a,其它版本的翻墙去下

    链接:https://pan.baidu.com/s/1vXuenc2uLx-ymrWvsg_zDw 
    提取码:o067 

    3.下载文件处理

    下载后的文件一般是这个样子:

    名字一长串的,当然还不能用,还要经过处理:把上边的apk名字修改成 webview.apk 并替换掉安卓系统里 external\chromium-webview\prebuilt\arm64里的webview.apk

    然后修改安卓系统文件frameworks/base/core/res/res/values/config.xml 里的

    <string name="config_webViewPackageName" translatable="false">com.android.webview</string>      改成如下:

    <string name="config_webViewPackageName" translatable="false">com.google.android.webview</string>

    编译安卓系统,升级后,查看浏览器内核如下,更新成功;

     

    参考链接:

    https://blog.csdn.net/Xiaoma_Pedro/article/details/105768707

    https://blog.csdn.net/s290717997/article/details/85129735

     

    展开全文
  • 报错信息指出了找到对应版本的...我们需要去下载与之安卓系统webview对应的chromedriver版本更新到appium中即可。( 以我上面的Webview版本为例,此时我需要下载的chrome 52.0.2743),Chromedriver下载链接如下: ...

    报错信息指出了找不到对应版本的Chromedriver,错误如下:
    在这里插入图片描述
    我们需要去下载与之安卓系统中webview对应的chromedriver版本更新到appium中即可。( 以我上面的Webview版本为例,此时我需要下载的chrome 52.0.2743),Chromedriver下载链接如下:
    https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md
    在这里插入图片描述
    找到所需要的对应版本进行下载。
    也可以从这个链接进行下载:
    https://npm.taobao.org/mirrors/chromedriver

    1.第一种方式:替换默认的位置的Chromedriver.exe
    下载完成,接下来需要找到appium服务使用的chromedriver驱动所在位置,然后使用新下载chromedriver替换它就可以了。
    ①.appium服务chromedriver驱动文件的位置:appium服务程序的根目录下 .\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
    如果你是默认安装的,那么目录如下:C:\Users\XXX\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
    (备注:实在找不到的,在你的桌面找到你的快捷方式,右键打开文件位置,就能找到根目录了,然后根据上面的目录自己去找)

    2.第二种方法:通过绝对路径进行指定驱动文件
    在这里插入图片描述
    “chromedriverExecutable”:“chromedriver.exe的路径”
    3.第三种方式:appium 高级设置中指定Chromedriver的二进制路径
    在这里插入图片描述
    4.第四种方式:chromedriverExecutableDir

    展开全文
  • 最讨厌来自安卓系统的这个提醒,这意味着我的手机达到了配置上限。而在更新以前,这种问题存在的。,好气啊!!!!最后找到oppo更新的罪魁祸首了。我真的服气了,OPPO又可以叫嚣我自己没关,不管OPPO...
  • 在过去的几个小时里,大量的安卓用户遇到了Gmail和其他各种应用连续Crash的情况,有些人发现卸载安卓系统WebView就可以停止崩溃。 这个问题首先是安卓系统抛出提示,警告应用程序如何 “不断关闭”。处于后台且当前...
  • 国内的安卓系统环境真的是一言难尽,各种后台全家桶,在国内没有苹果的那种消息推送,性能较强的安卓机型内存已经达到了12G,这已经超过了一些笔记本标配的内存大小,高中毕业手机的4g内存已经不够看了。tim(qq过于...
  • 程序本身包含一个PC版网站和一个手机版网站,如果把手机网站首页网址嵌入到WebView中,可以在1小时之内制作成功一个安卓版APP安装包,分分钟就能拥有一个自己的APP应用,肯定很拉风吧?后台管理系统支持移动设备,可...
  • 安卓系统的开源性让安卓本身充满了安全隐患,比如Android平台的Android MasterKey漏洞、AndroidWebView安全漏洞等。虽然Android已经在对发现的问题进行定期的更新,但是之前的漏洞已经对许多的安卓用户造成了伤害...
  • 然而,由于HTML5的W3C标准规范还未制定,安卓系统中类浏览器Webview自身存在一些局限性,因此仍存在着诸多问题亟需解决,包括:(1)多窗口类浏览器模式问题。安卓上用于加载的Webview视图窗口只是作为类浏览器而...
  • 系统API控制,VA虚拟并实现了整个安卓系统框架,这也是VA可以免安装在内部运行apk的原理,您可以对虚拟框架的实现进行修改以动态监测分析App的行为等;除此之外,您还可模拟一些系统行为以实现一些在外部难以实现的...
  • 安卓webview是默认开启<code>localStorage想磁盘写文件的权限的。所以如果需要使用<code>localStorage的同学需要找客户端支持。详细信息如下: <p><img alt="" src=...
  • 没有客户端无回调通知,其他功能影响,可以测试,可以学习,为了能持续更新,客户端需要购买后使用。 客户端赞助地址: http://pay.yio.me/#/goods/74ct1zBzZBW8YGFBKe-Yf 无需root权限非xposed框架。 提供技术...
  • pod 'KNBaseWebViewController',主要适配webView使用相册的功能。 2014年01月-2017年-07月 和包支付(和包官方iOS客户端) 项目描述 :和包客户端是中国移动和包业务针对手机推出的综合性生活服务平台.和包...
  • Android应用开发揭秘--详细书签版

    热门讨论 2012-12-12 13:27:46
    8.2.3 实时更新 235 8.3 Socket通信 238 8.3.1 Socket 基础 239 8.3.2 Socket 应用(简易聊天室) 244 8.4 网络通信的中文乱码问题 249 8.5 WebKit应用 250 8.5.1 WebKit概述 251 8.5.2 WebView浏览网页 252...
  • 例如最新安卓系统中的Material Design的点击波纹效果。TouchableOpacity这个组件用来给为内部元素在点击时添加透明度。TouchableWithoutFeedback这个组件只响应touch手势,增加点击态,推荐使用。 ...
  • IOException: CreateProcess error=2, 系统到指定的文件。 具体报错日志如下所示 IOException: Cannot run program "D:\Program File\AndroidSdk\ndk-bundle\toolchains\mips64el-linux-android-4.9\prebuilt\...
  • 包含各种工具类的集合,会定期更新,欢迎贡献code 使用方法: 2.0.0以后,放弃了support库,请使用AndroidX implementation 'com.easyandroid:easytools:2.0.3' 然后,在自己的Application中调用Utils.init(this)...
  • front-end-Doc 前端文档汇总(含代码规范、开发流程、知识分享,持续更新) 综合类 地址 前端文档基本例子 https://github.com/mgbq/front-end-Doc/blob/master/base.md 前端知识体系 ...Understanding ...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

安卓系统webview更新不了