现在的位置: 首页 > 综合 > 正文

android学习笔记—53_采用网页设计软件界面,以及使用android系统内置的浏览器,利用js调用java方法

2018年04月05日 ⁄ 综合 ⁄ 共 6475字 ⁄ 字号 评论关闭

Java技术qq交流群:JavaDream:251572072
2013/5/16
53_采用网页设计软件界面
------------------------------
1.注意这里可以把网页放到本地,也可以把文件放到互联网上.
2.如果放到互联网上的话,那么每次当应用启动的时候会通过
  互联网访问这个网页,也就是每次都需要加载这个网页
-----------------------------------------------------
3.下面是使用网页写的界面,做拨打电话的程序
-------------------------------------------
4.新建项目:
  htmlUI
------------------
a./htmlUI/src/com/credream/domain/Contact.java
  package com.credream.domain;

public class Contact {
 // 1.联系人的id
  private Integer id;
//2.联系人的名字
  private String name;
  //3.联系人的电话
  private String phone;
  //4.联系人的存款
  private Integer amount;
  public Integer getId() {
   return id;
  }
  public void setId(Integer id) {
   this.id = id;
  }
  public String getName() {
   return name;
  }
  public void setName(String name) {
   this.name = name;
  }
  public String getPhone() {
   return phone;
  }
  public void setPhone(String phone) {
   this.phone = phone;
  }
  public Integer getAmount() {
   return amount;
  }
  public void setAmount(Integer amount) {
   this.amount = amount;
  }
  public Contact(Integer id, String name, String phone, Integer amount) {
   this.id = id;
   this.name = name;
   this.phone = phone;
   this.amount = amount;
  }
  
}
---------------------------------------------------------------------
c./htmlUI/src/com/credream/htmlui/HtmlUIActivity.java
  package com.credream.htmlui;

import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.credream.domain.Contact;
import com.credream.service.ContactService;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebView;

public class HtmlUIActivity extends Activity {
    private WebView webView;
    //7.实例化业务bean
    private ContactService contactService;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //1.找到这个webView控件,
        webView = (WebView) this.findViewById(R.id.webView);
       //2.通过下面的代码,就可以加载/htmlUI/assets/index.html这个网页了.
        webView.loadUrl("file:///android_asset/index.html");
        //6.让浏览器支持javascript代码:
        webView.getSettings().setJavaScriptEnabled(true);
       
        //3.这里可以给浏览器,添加javascript接口,第一个参数是,一个js对象,其实就是一个java类,第二个参数是
        //javascript:contact.showcontacts()"这里指定的名字:contact.
        webView.addJavascriptInterface(new JSObject(), "contact");
       
        contactService = new ContactService();
    }
    //4.这里,就是js这个对象.
    private final class JSObject{
     //javascript:contact.showcontacts()
     //13.<a href='javascript:contact.call(\""+ jsonobjs[y].phone+ "\")'>"+ jsonobjs[y].phone+ "</a>";

     public void call(String phone){
      //14.这个方法是说,当用户点击电话号码的时候,会自动的触发,这个call方法:javascript:contact.call
      Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ phone));
      startActivity(intent);
     }
   //  javascript:contact.
     //这个方法就是网页中js指定的方法.showcontacts()
     public void showcontacts(){
      //  [{name:"xxx",amount:600,phone:"13988888"},{name:"bb",amount:200,phone:"1398788"}]
      try {
    //8.取得联系人的数据
       List<Contact> contacts = contactService.getContacts();
    //9.组拼成json格式的数据。
       JSONArray jsonArray = new JSONArray();
    for(Contact c : contacts){
     JSONObject jsonObject = new JSONObject();
     //10.添加名称到json对象中
     jsonObject.put("name", c.getName());
     //11.添加存款到json对象中
     jsonObject.put("amount", c.getAmount());
     //12.添加电话到json对象中
     jsonObject.put("phone", c.getPhone());
     
     jsonArray.put(jsonObject);
    }
    //
    String json = jsonArray.toString();
    //5.webView.loadUrl用这个api,调用javascript代码.
    webView.loadUrl("javascript:show('"+ json+ "')");
   } catch (JSONException e) {
    e.printStackTrace();
   }
     }
    }
}
-------------------------------------------------------------
d./htmlUI/src/com/credream/service/ContactService.java
   package com.credream.service;

import java.util.ArrayList;
import java.util.List;

import com.credream.domain.Contact;

public class ContactService {
 /**
  * 用于获取联系人
  * @return
  */
 public List<Contact> getContacts(){
  //1.添加测试数据
  List<Contact> contacts = new ArrayList<Contact>();
  contacts.add(new Contact(12, "李德伟", "13766666666", 13003));
  contacts.add(new Contact(23, "孔斌", "130066006", 122003));
  contacts.add(new Contact(98, "孙乐磊", "186768768", 10988787));
  contacts.add(new Contact(76, "总监", "1565622566", 1666));
  return contacts;
 }
}
-------------------------------------------------------
e./htmlUI/assets/index.html
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
 function show(jsondata){//jsondata接收一个字符串  [{name:"xxx",amount:600,phone:"13988888"},{name:"bb",amount:200,phone:"1398788"}]
         var jsonobjs = eval(jsondata);
         var table = document.getElementById("personTable");
         for(var y=0; y<jsonobjs.length; y++){
          var tr = table.insertRow(table.rows.length); //添加一行
          //添加三列,动态的往表格后面添加一行。
          var td1 = tr.insertCell(0);
          var td2 = tr.insertCell(1);
          td2.align = "center";
          var td3 = tr.insertCell(2);
          td3.align = "center";
          //设置列内容和属性
          td1.innerHTML = jsonobjs[y].name;
          td2.innerHTML = jsonobjs[y].amount;
          td3.innerHTML = "<a href='javascript:contact.call(\""+ jsonobjs[y].phone+ "\")'>"+ jsonobjs[y].phone+ "</a>";

   }
 }
</script>

</head>
<!-- js代码通过webView调用其插件中的java代码 -->
<body onload="javascript:contact.showcontacts()">
<!-- javascript:contact.showcontacts() 这个contact是自定义的对象,还没有 定义,将在下面讲解中定义..-->
   <table border="0" width="100%" id="personTable" cellspacing="0">
  <tr>
   <td width="35%">姓名</td><td width="30%" align="center">存款</td><td align="center">电话</td>
  </tr>
 </table>
 <a href="javascript:window.location.reload()">刷新</a>
</body>

</html>
------------------------------------------------
f./htmlUI/AndroidManifest.xml
  <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.credream.htmlui"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".HtmlUIActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
   <!--  拨打电话的权限 -->
<uses-permission android:name="android.permission.CALL_PHONE"/>
       
</manifest>
------------------------------------------------------------------

抱歉!评论已关闭.