请选择 进入手机版 | 继续访问电脑版

安卓学习笔记39:浏览网页、网页与安卓通信

[复制链接]
阿峻 发表于 2021-1-3 11:58:13 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
文章目次



零、学习目标


  • 掌握通过意图欣赏网页
  • 掌握通过WebView欣赏网页
  • 掌握如何实现网页与安卓通信
一、Intent十二种常用功能

1、欣赏网页

  1. Uri uri = Uri.parse("http://www.lzy.edu.cn");        Intent intent = new Intent(Intent.ACTION_VIEW, uri);startActivity(intent);
复制代码
2、欣赏舆图

  1. Uri uri = Uri.parse("geo:68.500511,-66.0068787");     Intent intent = new Intent(Intent.ACTION_VIEW, uri);       startActivity(intent);
复制代码
3、调出拨打电话界面

  1. Uri uri = Uri.parse("tel:1008");Intent intent = new Intent(Intent.ACTION_DIAL, uri);startActivity(intent);
复制代码
4、直接拨打电话

  1. Uri uri = Uri.parse("tel:1008");Intent intent = new Intent(Intent.ACTION_CALL, uri);startActivity(intent);
复制代码
5、卸载应用步伐

  1. Uri uri = Uri.fromParts("package", "net.hw.music", null);Intent intent = new Intent(Intent.ACTION_DELETE, uri);startActivity(intent);
复制代码
6、安装应用步伐

  1. Uri uri = Uri.fromParts("package", "net.hw.music", null);Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED, uri);startActivity(intent);
复制代码
7、播放存储卡音乐

  1. Uri uri = Uri.parse("file:///sdcard/music.mp3");Intent intent = new Intent(Intent.ACTION_VIEW, uri);startActivity(intent);
复制代码
8、调用发邮件

  1. Uri uri = Uri.parse("mailto:maths007@163.com");Intent intent = new Intent(Intent.ACTION_SENDTO, uri);startActivity(intent);
复制代码
9、发邮件

  1. Intent intent = new Intent(Intent.ACTION_SEND);String[] tos = {"maths007@163.com"};String[] ccs = {"maths007@163.com"};intent.putExtra(Intent.EXTRA_EMAIL, tos);intent.putExtra(Intent.EXTRA_CC, ccs);intent.putExtra(Intent.EXTRA_TEXT, "body");intent.putExtra(Intent.EXTRA_SUBJECT, "subject");intent.setType("message/rfc008");Intent.createChooser(intent, "Choose Email Client");
复制代码
10、发短信

  1. Uri uri = Uri.parse("smsto:10000");Intent intent = new Intent(Intent.ACTION_VIEW, uri);intent.putExtra("sms_body", "Hi, are you free tonight?");intent.setType("vnd.android-dir/mms-sms");startActivity(intent);
复制代码
11、直接发短信

  1. Uri uri = Uri.parse("smsto://10000");Intent intent = new Intent(Intent.ACTION_SENDTO, uri);intent.putExtra("sms_body", "Hi, are you free now?");startActivity(intent);
复制代码
12、发彩信

  1. Uri uri = Uri.parse("content://media/external/images/media/1");Intent intent = new Intent(Intent.ACTION_SEND);intent.putExtra("sms_body", "hi, are you ok?");intent.putExtra(Intent.EXTRA_STREAM, uri);intent.setType("image/png");startActivity(intent);
复制代码
二、案例演示 - 通过意图欣赏网页

使用Intent设置Action(Intent.ACTION_VIEW)与Data,可以实现欣赏网页的功能。
(一)运行效果


(二)实现步调

1、创建安卓应用【BrowseWebByIntent】



2、将配景图片拷贝到drawable目次


3、主布局资源文件activity_main.xml


  1.    
复制代码
4、字符串资源文件strings.xml


  1.     通过意图欣赏网页    欣赏网页   
复制代码
5、主界面类 - MainActivity


  1. package net.hw.browse_web_by_intent;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import androidx.appcompat.app.AppCompatActivity;/** * 功能:通过意图欣赏网页 * 作者:华卫 * 日期:2020年12月31日 */public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 使用布局文件设置用户界面        setContentView(R.layout.activity_main);    }    /**     * 欣赏网页     *     * @param view     */    public void doBrowseWeb(View view) {        // 分析网址,界说统一资源标识符        Uri uri = Uri.parse("http://www.lzy.edu.cn");        // 创建欣赏网页的意图        Intent intent = new Intent(Intent.ACTION_VIEW, uri);        // 按意图启动窗口,欣赏网页        startActivity(intent);    }   }
复制代码
6、启动应用,查察效果


(三)讲堂训练:欣赏用户指定网址



  • 在编辑框里输入网址

  • 单击【前往】按钮,欣赏指定网址

三、WebView概述

WebView是安卓里一个非常重要的控件,显示和渲染网页,可与页面JavaScript交互,实现混淆开发。内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页欣赏器。使用WebView之前,不要忘记在项目清单文件中授权访问因特网。
四、案例演示 - 通过WebView欣赏网页

(一)运行效果


(二)实现步调

1、创建安卓应用【BrowseWebByWebView】



2、将配景图片拷贝到drawable目次


3、主布局资源文件activity_main.xml


  1.                            
复制代码
4、字符串资源文件strings.xml


  1.     通过WebView欣赏网页    请输入网址    前往
复制代码
5、在项目清单文件里授权访问因特网


6、主界面类 - MainActivity


  1. package net.hw.browse_web_by_webview;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {    private EditText edtURL; // 网址编辑框    private Button btnGo; // 前往按钮    private WebView wvWebPage; // 网页视图    private String strURL; // 网址字符串    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 使用布局资源文件设置用户界面        setContentView(R.layout.activity_main);        // 通过资源标识符获取控件实例        edtURL = findViewById(R.id.edtUrl);        btnGo = findViewById(R.id.btnGo);        wvWebPage = findViewById(R.id.wvWebPage);        // 给按钮注册监听器,编写事件处理处罚代码        btnGo.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 得到文本框里输入的网址                strURL = edtURL.getText().toString();                // 判定网址是否以"http://或https://"打头                if (checkURL(strURL)) {                    openBrowser(strURL);                } else {                    Toast.makeText(MainActivity.this, "网址必须以“http://或https://”打头!", Toast.LENGTH_LONG).show();                }            }        });        // 给文本框注册监听器,编写事件处理处罚代码        edtURL.setOnKeyListener(new View.OnKeyListener() {            @Override            public boolean onKey(View v, int keyCode, KeyEvent event) {                if (keyCode == KeyEvent.KEYCODE_ENTER) {                    // 得到文本框里输入的网址                    strURL = edtURL.getText().toString();                    // 判定网址是否以"http://或https://"打头                    if (checkURL(strURL)) {                        openBrowser(strURL);                        return true; // 事件处理处罚完毕,不再往后流传                    } else {                        Toast.makeText(MainActivity.this, "网址必须以“http://或https://”打头!", Toast.LENGTH_LONG).show();                    }                }                return false;            }        });    }    /**     * 让欣赏器引擎加载网址,显示网页     */    protected void openBrowser(String strUrl) {        // 设置JavaScript可用        wvWebPage.getSettings().setJavaScriptEnabled(true);        // 创建并设置web客户端        wvWebPage.setWebViewClient(new WebViewClient() {            @Override            public boolean shouldOverrideUrlLoading(WebView view, String url) {                view.loadUrl(url);                return true; // 返回true在webview里显示网页,否则调用安卓自带欣赏器或第三方欣赏器显示网页            }        });        // 加载网址,显示网页内容        wvWebPage.loadUrl(strURL);    }    /**     * 功能:查抄网址是否以“http://或https://”打头     *     * @param url 网址     * @return 正当网址返回真,否则返回假     */    private boolean checkURL(String url) {        if (url.length() > 7) {            if (url.substring(0, 7).equalsIgnoreCase("http://")) {                return true;            }        } else if (url.length() > 8) {            if (url.substring(0, 8).equalsIgnoreCase("https://")) {                return true;            }        }        return false;    }}
复制代码
7、启动应用,查察效果


五、案例演示 - 网页与安卓通信

(一)运行效果



(二)实现步调

1、创建安卓应用【WebCommunicatesWithAnroid】



2、主布局资源文件activity_main.xml


  1.                            
复制代码
3、字符串资源文件strings.xml


  1.     网页与安卓通信    在安卓里调用JavaScript
复制代码
4、在assets目次里创建网页文件 - test.html


  1.         [size=6]网页视图(WebView)[/size]
  2.     [url=https://www.jianchenwangluo.com/#]显示JavaScript告诫框[/url]
  3.     [url=https://www.jianchenwangluo.com/#]在网页里调用安卓[/url]
  4. [color=#ff00ff][size=20px][/size][/color]
复制代码
5、在项目清单文件里授权访问因特网


6、主界面类 - MainActivity


  1. package net.hw.web_android;import android.app.AlertDialog;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.webkit.JavascriptInterface;import android.webkit.JsResult;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.widget.Button;import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;/** * 功能:网页与安卓通信 * 作者:华卫 * 日期:2021年01月01日 */public class MainActivity extends AppCompatActivity {    /**     * 网页视图     */    private WebView wvWebPage;    /**     * 按钮:在安卓里调用JavaScript     */    private Button btnCallJavaScriptFromAndroid;    /**     * 标签:显示来自网页的消息     */    private TextView tvMessageFromWebPage;    /**     * 消息处理处罚器,用于欣赏器线程与主线程之间的转换     */    private Handler handler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 使用布局资源文件设置用户界面        setContentView(R.layout.activity_main);        // 通过资源标识符获取控件实例        wvWebPage = findViewById(R.id.wvWebPage);        btnCallJavaScriptFromAndroid = findViewById(R.id.btnCallJavaScriptFromAndroid);        tvMessageFromWebPage = findViewById(R.id.tvMessageFromWebPage);        // 实例化消息处理处罚器        handler = new Handler();        // 设置JavaScript可用        wvWebPage.getSettings().setJavaScriptEnabled(true);        // 使用wvWebPage加载当地页面        wvWebPage.loadUrl("file:///android_asset/test.html");        // 设置网页欣赏器客户端,能监听到网页弹出告诫框        wvWebPage.setWebChromeClient(new WebChromeClient() {            @Override            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {                /* 创建一个安卓告诫对话框 */                // 创建告诫对话框生成器                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);                // 设置对话框标题                builder.setTitle("提示");                // 设置对话框图标                builder.setIcon(R.mipmap.ic_launcher);                // 设置对话框正文                builder.setMessage(message);                // 设置确定按钮                builder.setPositiveButton("确定", null);                // 根据设置创建告诫对话框                AlertDialog dialog = builder.create();                // 显示告诫对话框                dialog.show();                // 处理处罚用户确认操纵                result.confirm();                // 事件处理处罚完毕                return true;            }        });        // 给按钮注册监听器,编写事件处理处罚代码        btnCallJavaScriptFromAndroid.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 使用wvWebPage调用JavaScript函数                wvWebPage.loadUrl("javascript:callJS('来自安卓的信息:你好!')");            }        });        /*         * 沟通网页与安卓的桥梁类,实例化后可供JavaScript调用。         * 当JavaScript调用AndroidBridge对象的callAndroid方法时,         * 安卓就会创建一个Runnable对象,而且把它放到handler的运行队列中,         * 这样主线程一有时机就会调用run()方法,修改标签内容。         */        class AndroidBridge {            @JavascriptInterface            public void callAndroid(final String arg) {                handler.post(new Runnable() {                    @Override                    public void run() {                        tvMessageFromWebPage.setText(arg); // 设置标签内容                    }                });            }        }        // 实例化AndroidBridge,名为android供JavaScript调用。        wvWebPage.addJavascriptInterface(new AndroidBridge(), "android");    }}
复制代码
7、启动应用,查察效果



(三)讲堂训练 - 实现表达式盘算器






来源:https://blog.csdn.net/howard2005/article/details/112048952
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )