android获取联系人信息
android中在webView中显示网页,在网页中通过Js调用通讯录中的联系人信息,显示到webView中。
部分开发代码如下:
首先的Html的代码如下:
编号 name phone
获取联系人信息的一个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 mContactsName = new ArrayList(); /**联系人头像**/ private ArrayList mContactsNumber = new ArrayList(); /**联系人头像**/ private ArrayList mContactsPhonto = new ArrayList(); /**保存联系人**/private ArrayList linkMans = new ArrayList(); 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(){//清空linkManslinkMans.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
MainActivity中的部分代码如下:
public class MainActivity extends Activity {private String contactId, contactName;private WebView webView; private Handler handler = new Handler(); //自定义的弹出框类 SelectPicPopupWindow menuWindow; @Overrideprotected 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; } } }; @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.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();}
代码大概就是这样!本人页是初学者,不是很完善。要源码的联系我!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
