H5与Activity之间的通信(调用)

1.通过H5页面的超链接尾部信息不同进行跳转(类似于URL拦截器)

例如:控件x的href="http://www.example.com/?menu_id=1",

在代码中添加webview

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

/**
 * Author:JsonLu
 * DateTime:2015/8/31 17:52
 * Email:[email protected]_link.cc
 */
public class SecoundActivity extends Activity{

    private WebView mWebView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView)findViewById(R.id.webview);
        String url = "http://jcut.sinaapp.com/androidjs/second.html?menu_id=1";
        this.mWebView.loadUrl(url);
        mWebView.setWebViewClient(new MyWebViewClient());

    }
    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.d("URL",url);
            Intent it = new Intent();
            if(url.endsWith("?menu_id=1")){
                it.setClass(SecoundActivity.this, MainActivity.class);
                startActivity(it);
            }else{
                Toast.makeText(SecoundActivity.this,"时间:"+System.currentTimeMillis(),Toast
                        .LENGTH_LONG).show();
            }
            return true;
        }
    }
}

2.通过js调用本地类的方法

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Toast;

/**
 * Author:JsonLu
 * DateTime:2015/8/31 17:52
 * Email:[email protected]_link.cc
 */
public class MainActivity extends Activity {

    private WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.initView();
    }

    @TargetApi(Build.VERSION_CODES.ECLAIR_MR1)
    private void initView() {
        this.mWebView = (WebView) this.findViewById(R.id.webview);
        //可以执行javascript
        this.mWebView.getSettings().setJavaScriptEnabled(true);
        String url = "http://jcut.sinaapp.com/androidjs/";
        this.mWebView.loadUrl(url);
        //android添加javascript代码,让H5页面能够调用,第二个参数对应的是H5的
        this.mWebView.addJavascriptInterface(new PayJavaScriptInterface(), "js");
    }

    private class PayJavaScriptInterface {

        @JavascriptInterface
        public void jumpActivity(int param) {
            if (param == 1) {
                Intent it = new Intent();
                it.setClass(MainActivity.this, SecoundActivity.class);
                startActivity(it);
            } else {
                Toast.makeText(MainActivity.this, "时间:" + System.currentTimeMillis(), Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }
}

index.html

<html>
<head>
<meta charset="UTF-8">
<title>交互Demo</title>
<meta content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width" name="viewport">
<style>
body{width:100%;height:auto;text-align:center;background-color:#eee}
button{width:80%;height:40px;background-color:#36A803;border:1px solid #ddd;border-radius:5px;font-size:18px;color:#fff;margin-top:50px;}
</style>
</head>
<body>
<div id="userinfo"></div>
<button onClick="toActivity(1);">跳转</button>
<button onClick="toActivity(2);">显示时间</button>
<script>
function toActivity(param){
    //调用本地的类(js)的jumpActivity()方法;
    window.js.jumpActivity(param);
}
</script>
</body>
</html>

second.html

<html>
<head>
<meta charset="UTF-8">
<title>交互Demo</title>
<meta content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width" name="viewport">
<style>
body{width:100%;height:auto;text-align:center;background-color:#eee;}
#userinfo{margin-top:50px}
a{text-decoration:none;width:80%;padding:5% 30% 5% 30%;height:40px;background-color:#36A803;border:1px solid #ddd;border-radius:5px;font-size:18px;color:#fff;}
</style>
</head>
<body>
<div style="margin-top:50px">
<a href="http://jcut.sinaapp.com/androidjs/index.html?menu_id=1">跳转</a>
</div>
<div style="margin-top:200px">
<a href="http://jcut.sinaapp.com/androidjs/index.html?menu_id=2">显示时间</a>
</div>
</body>
<html>
时间: 2024-07-29 18:58:03

H5与Activity之间的通信(调用)的相关文章

Android——Fragment和Activity之间的通信+Frangment生命周期

Android--Fragment和Activity之间的通信+Frangment生命周期 Fr'agment和Activity之间的通信 1.在Fragment中声明一个接口. 2.在Activity中实现在Fargment中声明的接口. 3.在Fragment中声明一个接口对象. 4.在Frangment的生命周期Onattach方法中判断当前Activity是否实现了此Fragment中声明的接口.如果已实现,就把当前Activity转换成接口对象. 5.调用Activity中实现的方法=

Fragment的生命周期和Activity之间的通信以及使用

Fragment通俗来讲就是碎片,不能单独存在,意思就是说必须依附于Activity,一般来说有两种方式把Fragment加到Activity,分为静态,动态. 静态即为右键单击,建立一个Fragment,选择Blank,在Activity布局中直接加fragment,name属性直接指向之前建立的Fragment,这就添加上了Fragment,这种较为简单. 动态: 我们要做的是在Activity中添加一个Fragment,Fragment中有两个按钮,当按下按钮时分别切换不同的Fragmen

android中fragment和activity之间相互通信

在用到fragment的时候,老是会遇到一个问题,就是fragment与activity之间的通信.下面就来记录一下activity和fragment之间 通过实现接口来互相通信的方法. 1. activity 向fragment发出通信,就这么写: private OnMainListener mainListener; // 绑定接口 @Override public void onAttachFragment(Fragmentfragment) { try { mainListener =

Android中两个Activity之间简单通信

在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信息的发起者为Test,接收者为Target,代码如下: Test类: 1 package com.example.testsend; 2 3 import android.content.Intent; 4 import android.support.v7.app.AppCompatActivit

Android中BroadCast与Activity之间的通信

在看本文之前,如果你对于Android的广播机制不是很了解,建议先行阅读我转载的一篇博文:图解 Android 广播机制. 由于本案例比较简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: MainActivity的代码如下: package com.gc.testbroadcasedemo; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Cont

android中fragment的使用及与activity之间的通信

一.fragment的生命周期,具体方法什么时候调用就不说了. 二 在activity中使用fragment和通信有两种常见的方式, 1.静态的方式 (1)定义一个类继承Fragment,如 MyFragment,这里复写onCreateView()方法和onAttach()方法 (2)onCreateView()加载一些布局对象以及设置View对象,并返回一个View对象,onAttach()通信的时候用到 (3)在activity的layout的布局文件中引用Fragment继承类(注意设置

Service和Activity之间的通信

Service的启动方式有两种,一种是通过start方式,一种是通过bind方式,通过start方式启动服务后,启动服务的组件和服务便没有多大联系了.所以为了能和Service通信,只能通过bind的方式.下面分几步介绍下:(demo里面的Service提供一个下载的功能,然后在Activity中决定何时开始下载,以及随时查看下载进度) 第一步: 在Service类中创建一个内部类继承自Binder(onBind方法返回IBinder接口,Binder类是IBinder接口的实现类)(看到这里还

Fragment 与Activity之间的通信

1.Fragment-->Activity 在fragment中的onAttach()中引用Activity实现的接口实例. 2Activity-->Fragment 直接调用 3多个Fragment通信 通过Actiity间接通信

安卓activity之间互相通信的问题

============问题描述============ 大侠,如果我想在activity A中启动activity B,然后activity A还能向B发送状态信息,B再根据A发送来的状态决定自身的变化,比如A发送退出命令,B接收之后就finish,这样的想法能实现吗? 之所有有这样的需求是因为,比如在登录的时候,考虑到网络延迟的关系,在用户点按钮时,我想要出现一个loading的界面,覆盖在登录界面上面,然后当服务端返回成功,loading的那个界面就变成一个对号√的图片,失败就变成一个叉×