android获取联系人信息

android中在webView中显示网页,在网页中通过Js调用通讯录中的联系人信息,显示到webView中。





部分开发代码如下:

首先的Html的代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">

<HTML>
<META http-equiv=Content-Type content="text/html; charset=utf-8"><LINK 
href="css/style_cn.css" type=text/css rel=stylesheet>
<SCRIPT language=JavaScript>

  function contactlist(jsons){  
  var table=document.getElementById("contactTable");//获得html中Table  
  var arr = eval(jsons);//将jsons字符串转换为json对象数组  
  for(var i=0;i < arr.length;i++){  
    var jsonObj = arr[i];  
    var tr = table.insertRow(table.rows.length);//添加tr  
    var td1 = tr.insertCell(0);//td  
    var td2 = tr.insertCell(1);  
    td2.align = "center";  
    var td3 = tr.insertCell(2);  
  
    td1.innerHTML = jsonObj.id;//设置每列对应的值  
    td2.innerHTML = jsonObj.name;  
    td3.innerHTML = "<a href=\"javascript:myjavascript.call(‘"+jsonObj.phone + "‘)\">" + jsonObj.phone + "</a>";   
    }  
  }  
  function getAllLinkMan(){
	  javascript:myjavascript.getAllLinkMan();
  }
  function getSimLinkMan(){
	  javascript:myjavascript.getSimLinkMan();
  }
  function getLinkMan(){
	  javascript:myjavascript.getPhoneLinkMan();
  }
  function getNext(){
	  javascript:myjavascript.getNext();
  }
  
   
</SCRIPT>  
 <BODY onload="javascript:myjavascript.show()">  
   <table width="100%" border="0" cellspacing="0" id="contactTable">  
    <tr>  
      <td width="20%">编号</td>  
      <td width="center">name</td>  
      <td width="30%">phone</td>  
    </tr>  
   </table>  
  <input type="button"  value="获取所有的联系人"  onclick="getAllLinkMan();"/>
  <input type="button"  value="获取多个的联系人"  onclick="getLinkMan();"/>
  <input type="button"  value="获取sim的联系人"  onclick="getSimLinkMan();"/>
  <input type="button"  value="获取单个的联系人" />
  <input type="button"  value="下一个页面" onclick="getNext();"/>
 </BODY>  
</HTML>  

获取联系人信息的一个MyJavaScript类:

package com.stcyclub.testhtmlgetlinkman;

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

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

import com.stcyclub.testhtmlgetlinkman.po.LinkMan;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Handler;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.provider.ContactsContract.PhoneLookup;
import android.sax.StartElementListener;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.WebView;

public class MyJavaScript {  
	/**获取库Phon表字段**/  
    private static final String[] PHONES_PROJECTION = new String[] {  
        Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID,Phone.CONTACT_ID };  
     
    /**联系人显示名称**/  
    private static final int PHONES_DISPLAY_NAME_INDEX = 0;  
      
    /**电话号码**/  
    private static final int PHONES_NUMBER_INDEX = 1;  
      
    /**头像ID**/  
    private static final int PHONES_PHOTO_ID_INDEX = 2;  
     
    /**联系人的ID**/  
    private static final int PHONES_CONTACT_ID_INDEX = 3;  
      
 
    /**联系人名称**/  
    private ArrayList<String> mContactsName = new ArrayList<String>();  
      
    /**联系人头像**/  
    private ArrayList<String> mContactsNumber = new ArrayList<String>();  
 
    /**联系人头像**/  
    private ArrayList<Bitmap> mContactsPhonto = new ArrayList<Bitmap>(); 
    /**保存联系人**/
    private ArrayList<LinkMan> linkMans = new ArrayList<LinkMan>();  
      
	 private final int DIALOG          = 0;
	 private final int REQUEST_CONTACT = 1;
    private WebView webview;  
    //使用一个handler来处理加载事件  
    private Handler handler;  
     private Context mContext;
    public MyJavaScript(Context context,Handler handler){  
        this.handler = handler;  
        webview = (WebView) ((Activity)context).findViewById(R.id.myweb); 
         mContext  =  context;
    }  
    /* 
     * java调用显示网页,异步 
     */  
    public void show(){  
      handler.post(new Runnable() {           
        public void run() {  
       // 重要:url的生成,传递数据给网页  
        String url = "javascript:contactlist(‘" + generateData() + "‘)";  
       webview.loadUrl(url);  
        }  
       });  
    }  
    /* 
     * 由java程序生成数据传到网页中显示 
     */  
    private String generateData(){  
      try {  
        //构造一个json对象  
        JSONObject obj1 = new JSONObject();  
        obj1.put("id", 123);  
        obj1.put("name", "tom");  
        obj1.put("phone", "66666666");  
              
        JSONObject obj2 = new JSONObject();  
        obj2.put("id", 13);  
        obj2.put("name", "jerry");  
        obj2.put("phone", "88888888");  
              
        //将构造好的2个json对象加入到json数组中  
        JSONArray arr = new JSONArray();  
        arr.put(obj1);  
        arr.put(obj2);  
        return arr.toString();  
        } catch (JSONException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return "";  
    }  
    /* 
     * 拨打电话方法 
     */  
    public void call(final String phone){  
          Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + phone));  
          mContext.startActivity(intent);  
    } 
    /**
     * 获取所有的联系人
     */
   
    public void getPhoneLinkMan(){
    	//清空linkMans
    	linkMans.clear();
    	//得到ContentResolver对象
    	//super.onCreate(savedInstanceState);
        ContentResolver cr = mContext.getContentResolver();
        //取得电话本中开始一项的光标
        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        //向下移动光标
        while(cursor.moveToNext())
        {
            //取得联系人名字
            int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);
            String contact = cursor.getString(nameFieldColumnIndex);
           //取得电话号码
            String ContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null);
            while(phone.moveToNext())
            {
                String Number = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
               // string += (contact + ":" + Number + "");
                LinkMan man=new LinkMan(contact, Number);
                Log.d("TAG",contact + ":" + Number + "");
                linkMans.add(man);
            }
        }
        cursor.close();
        Log.d("TAG", "linkMans.size()"+linkMans.size());
        handler.post(new Runnable() {           
            public void run() {  
           // 重要:url的生成,传递数据给网页  
            String url = "javascript:contactlist(‘" + ObjectToJson() + "‘)";  
            webview.loadUrl(url);  
            }  
           });  
    }
   
    }
    /**
     * 将对象转换成为json数据
     */
    public String ObjectToJson(){
    	 try {    
    	        //将构造好json数组
    	        JSONArray arr = new JSONArray(); 
    	        for(int i =0; i<linkMans.size();i++){
    	        	 //构造一个json对象  
        	        JSONObject obj = new JSONObject();  
        	        obj.put("id", i);  
        	        obj.put("name", linkMans.get(i).getName());  
        	        obj.put("phone", linkMans.get(i).getPhone());
        	        arr.put(obj);  
    	        }
    	        return arr.toString();  
    	        } catch (JSONException e) {  
    	            // TODO Auto-generated catch block  
    	            e.printStackTrace();  
    	        }  
    	        return ""; 
    }
    public void getNext(){
    //	webview.loadUrl("file:///android_asset/index2.html");
    	webview.loadUrl("http://www.baidu.com");
//    	Uri uri=Uri.parse("file:///android_asset/index2.html");
//    	Intent intent=new Intent(Intent.ACTION_VIEW,uri);
//    	mContext.startActivity(intent);
    }
   
}  




MainActivity中的部分代码如下:

public class MainActivity extends Activity {


    private String contactId, contactName;
	 private WebView webView;  
	  private Handler handler = new Handler(); 
	  //自定义的弹出框类  
	    SelectPicPopupWindow menuWindow; 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		init();
	}


	@SuppressLint("JavascriptInterface")
	private void init() {
		 webView = (WebView)findViewById(R.id.myweb);  
	      //重要:让webview支持javascript  
	        webView.getSettings().setJavaScriptEnabled(true);  
	      //重要:添加可以供html中可供javascript调用的接口类  
	       webView.addJavascriptInterface(new MyJavaScript(this, handler), "myjavascript");  
	      //加载index.html  
	      webView.loadUrl("file:///android_asset/index.html");
	}
	public void btnClick(View v){
		//实例化SelectPicPopupWindow  
        menuWindow = new SelectPicPopupWindow(MainActivity.this, itemsOnClick);  
        //显示窗口  
        menuWindow.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置  
      
	}
	//为弹出窗口实现监听类  
    private OnClickListener  itemsOnClick = new OnClickListener(){  
  
        public void onClick(View v) {  
            menuWindow.dismiss();  
            switch (v.getId()) {  
            
            default:  
                break;  
            }  
        }  
    };  
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		Log.d("TAG", "requestCode"+requestCode+"\t resultCode"+resultCode+"\t"+data);
		 Uri result = data.getData();
         contactId = result.getLastPathSegment();
         contactName = getPhoneContacts(contactId);
         Toast.makeText(this, "contactName"+contactName, Toast.LENGTH_LONG).show();
    
	}


代码大概就是这样!本人页是初学者,不是很完善。要源码的联系我!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。