才等录fff26的时候,h5页面调用微信js录音显示wwWfff26空白是咋回事

HotNews Pro Plus常见问题
知更鸟崇尚专注 追求极致1333文章6907评论HotNews主题
本站简介分享交流WordPress经验与技巧,关注前端设计与网站制作,打造自己专属的WordPress主题,让你的博客与众不同! 我的微信 微信公众号
记住我的登录信息65243人阅读
【Android通讯录模块开发】(10)
Android通讯录管理(获取联系人、通话记录、短信消息)
日 通讯录开发研究学习
前言:前阵子主要是记录了如何对联系人的一些操作,比如搜索,全选、反选和删除等在实际开发中可能需要实现的功能,本篇博客是小巫从一个别人开源的一个项目抽取出来的部分内容,把它给简化出来,可以让需要的朋友清楚知道如何对Android数据库操作,异步查询数据库获取我们需要的内容。由于内容比较多,我将分三篇博客来讲述获取联系人、通话记录、短信消息的实现。
也许你根本就没耐心看,源码在这里,骚年去下吧。
上面的是获取联系人的界面效果,实现分组显示联系人,快速索引条查找联系人,下面是实现:
从权限开始:
&!-- 读联系人权限 --&
&uses-permission android:name="android.permission.READ_CONTACTS" /&
&!-- 写联系人权限 --&
&uses-permission android:name="android.permission.WRITE_CONTACTS" /&
&!-- 拨号权限 --&
&uses-permission android:name="android.permission.CALL_PHONE" /&
&!-- 读短信权限 --&
&uses-permission android:name="android.permission.READ_SMS" /&
界面布局:
/Contact_Demo/res/layout/contact_list_view.xml
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contact_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000" &
&com.suntek.contact.view.SlidingLinearLayout
android:id="@+id/slidingview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true" &
android:id="@+id/contact_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#000000"
android:divider="#"
android:fadingEdge="none"
android:scrollbars="none"
android:scrollingCache="false"
android:visibility="visible" /&
&/com.suntek.contact.view.SlidingLinearLayout&
&com.suntek.contact.view.QuickAlphabeticBar
android:id="@+id/fast_scroller"
android:layout_width="22dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_gravity="top|right|center"
android:layout_marginTop="0dip"
android:background="@null"
android:scaleType="centerInside"
android:src="@drawable/dic_background" &
&/com.suntek.contact.view.QuickAlphabeticBar&
android:id="@+id/fast_position"
android:layout_width="70dip"
android:layout_height="70dip"
android:layout_centerInParent="true"
android:layout_gravity="center_horizontal|top"
android:layout_margin="34dip"
android:background="@drawable/sort_icon_bg_click"
android:gravity="center"
android:padding="2dip"
android:textColor="#404040"
android:textSize="48dip"
android:visibility="invisible" /&
&/RelativeLayout&
/Contact_Demo/res/layout/contact_list_item.xml
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" &
&!-- 首字母 --&
android:id="@+id/alpha"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#333333"
android:paddingLeft="10dip"
android:textColor="#FFFFFF"
android:visibility="gone" /&
&!-- 联系人信息 --&
&QuickContactBadge
android:id="@+id/qcb"
android:layout_width="75dip"
android:layout_height="75dip"
android:layout_alignParentLeft="true"
android:layout_below="@+id/alpha"
android:layout_marginBottom="3dip"
android:layout_marginTop="3dip"
android:src="@drawable/touxiang" /&
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5.0dip"
android:layout_toRightOf="@+id/qcb"
android:singleLine="true"
android:textAppearance="?android:textAppearanceLarge"
android:textColor="#FFFFFF" /&
android:id="@+id/number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="5.0dip"
android:layout_toRightOf="@+id/qcb"
android:singleLine="true"
android:textAppearance="?android:textAppearanceSmall"
android:textColor="#FFFFFF" /&
&/RelativeLayout&
代码实现:
1. 先定义一个实体类,用来保存联系人信息
/Contact_Demo/src/com/suntek/contact/model/ContactBean.java
package com.suntek.contact.
public class ContactBean {
private int contactId; //id
private String desplayN//姓名
private String phoneN // 电话号码
private String sortK // 排序用的
private Long photoId; // 图片id
private String lookUpK
private int selected = 0;
private String formattedN
private S // 姓名拼音
public int getContactId() {
return contactId;
public void setContactId(int contactId) {
this.contactId = contactId;
public String getDesplayName() {
return desplayN
public void setDesplayName(String desplayName) {
this.desplayName = desplayN
public String getPhoneNum() {
return phoneN
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneN
public String getSortKey() {
return sortK
public void setSortKey(String sortKey) {
this.sortKey = sortK
public Long getPhotoId() {
return photoId;
public void setPhotoId(Long photoId) {
this.photoId = photoId;
public String getLookUpKey() {
return lookUpK
public void setLookUpKey(String lookUpKey) {
this.lookUpKey = lookUpK
public int getSelected() {
public void setSelected(int selected) {
this.selected =
public String getFormattedNumber() {
return formattedN
public void setFormattedNumber(String formattedNumber) {
this.formattedNumber = formattedN
public String getPinyin() {
public void setPinyin(String pinyin) {
this.pinyin =
/Contact_Demo/src/com/suntek/contact/adapter/ContactListAdapter.java
package com.suntek.contact.
import java.io.InputS
import java.util.ArrayL
import java.util.C
import java.util.HashM
import java.util.L
import java.util.S
import java.util.regex.P
import android.content.ContentU
import android.content.C
import android.graphics.B
import android.graphics.BitmapF
import android.net.U
import android.provider.ContactsC
import android.provider.ContactsContract.C
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import android.widget.BaseA
import android.widget.QuickContactB
import android.widget.TextV
import com.suntek.contact.R;
import com.suntek.contact.model.ContactB
import com.suntek.contact.view.QuickAlphabeticB
public class ContactListAdapter extends BaseAdapter {
private LayoutI
private List&ContactBean&
private HashMap&String, Integer& alphaI // 字母索引
private String[] // 存储每个章节
private C // 上下文
public ContactListAdapter(Context context, List&ContactBean& list,
QuickAlphabeticBar alpha) {
this.ctx =
this.inflater = LayoutInflater.from(context);
this.list =
this.alphaIndexer = new HashMap&String, Integer&();
this.sections = new String[list.size()];
for (int i = 0; i & list.size(); i++) {
// 得到字母
String name = getAlpha(list.get(i).getSortKey());
if (!alphaIndexer.containsKey(name)) {
alphaIndexer.put(name, i);
Set&String& sectionLetters = alphaIndexer.keySet();
ArrayList&String& sectionList = new ArrayList&String&(sectionLetters);
Collections.sort(sectionList); // 根据首字母进行排序
sections = new String[sectionList.size()];
sectionList.toArray(sections);
alpha.setAlphaIndexer(alphaIndexer);
public int getCount() {
return list.size();
public Object getItem(int position) {
return list.get(position);
public long getItemId(int position) {
public void remove(int position) {
list.remove(position);
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.contact_list_item, null);
holder = new ViewHolder();
holder.quickContactBadge = (QuickContactBadge) convertView
.findViewById(R.id.qcb);
holder.alpha = (TextView) convertView.findViewById(R.id.alpha);
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.number = (TextView) convertView.findViewById(R.id.number);
convertView.setTag(holder);
holder = (ViewHolder) convertView.getTag();
ContactBean contact = list.get(position);
String name = contact.getDesplayName();
String number = contact.getPhoneNum();
holder.name.setText(name);
holder.number.setText(number);
holder.quickContactBadge.assignContactUri(Contacts.getLookupUri(
contact.getContactId(), contact.getLookUpKey()));
if (0 == contact.getPhotoId()) {
holder.quickContactBadge.setImageResource(R.drawable.touxiang);
Uri uri = ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI,
contact.getContactId());
InputStream input = ContactsContract.Contacts
.openContactPhotoInputStream(ctx.getContentResolver(), uri);
Bitmap contactPhoto = BitmapFactory.decodeStream(input);
holder.quickContactBadge.setImageBitmap(contactPhoto);
// 当前字母
String currentStr = getAlpha(contact.getSortKey());
// 前面的字母
String previewStr = (position - 1) &= 0 ? getAlpha(list.get(
position - 1).getSortKey()) : " ";
if (!previewStr.equals(currentStr)) {
holder.alpha.setVisibility(View.VISIBLE);
holder.alpha.setText(currentStr);
holder.alpha.setVisibility(View.GONE);
return convertV
private static class ViewHolder {
QuickContactBadge quickContactB
* 获取首字母
* @param str
private String getAlpha(String str) {
if (str == null) {
return "#";
if (str.trim().length() == 0) {
return "#";
char c = str.trim().substring(0, 1).charAt(0);
// 正则表达式匹配
Pattern pattern = Pattern.compile("^[A-Za-z]+$");
if (pattern.matcher(c + "").matches()) {
return (c + "").toUpperCase(); // 将小写字母转换为大写
return "#";
/Contact_Demo/src/com/suntek/contact/ContactListActivity.java
package com.suntek.
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import android.app.A
import android.content.AsyncQueryH
import android.content.ContentR
import android.database.C
import android.net.U
import android.os.B
import android.provider.ContactsC
import android.view.V
import android.widget.ListV
import com.suntek.contact.adapter.ContactListA
import com.suntek.contact.model.ContactB
import com.suntek.contact.view.QuickAlphabeticB
* 联系人列表
* @author Administrator
public class ContactListActivity extends Activity {
private ContactListA
private ListView contactL
private List&ContactBean&
private AsyncQueryHandler asyncQueryH // 异步查询数据库类对象
private QuickAlphabeticBar alphabeticB // 快速索引条
private Map&Integer, ContactBean& contactIdMap =
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_list_view);
contactList = (ListView) findViewById(R.id.contact_list);
alphabeticBar = (QuickAlphabeticBar) findViewById(R.id.fast_scroller);
asyncQueryHandler = new MyAsyncQueryHandler(getContentResolver());
* 初始化数据库查询参数
private void init() {
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; // 联系人Uri;
// 查询的字段
String[] projection = { ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.DATA1, "sort_key",
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.PHOTO_ID,
ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY };
// 按照sort_key升序查詢
asyncQueryHandler.startQuery(0, null, uri, projection, null, null,
"sort_key COLLATE LOCALIZED asc");
* @author Administrator
private class MyAsyncQueryHandler extends AsyncQueryHandler {
public MyAsyncQueryHandler(ContentResolver cr) {
super(cr);
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
if (cursor != null && cursor.getCount() & 0) {
contactIdMap = new HashMap&Integer, ContactBean&();
list = new ArrayList&ContactBean&();
cursor.moveToFirst(); // 游标移动到第一项
for (int i = 0; i & cursor.getCount(); i++) {
cursor.moveToPosition(i);
String name = cursor.getString(1);
String number = cursor.getString(2);
String sortKey = cursor.getString(3);
int contactId = cursor.getInt(4);
Long photoId = cursor.getLong(5);
String lookUpKey = cursor.getString(6);
if (contactIdMap.containsKey(contactId)) {
// 创建联系人对象
ContactBean contact = new ContactBean();
contact.setDesplayName(name);
contact.setPhoneNum(number);
contact.setSortKey(sortKey);
contact.setPhotoId(photoId);
contact.setLookUpKey(lookUpKey);
list.add(contact);
contactIdMap.put(contactId, contact);
if (list.size() & 0) {
setAdapter(list);
super.onQueryComplete(token, cookie, cursor);
private void setAdapter(List&ContactBean& list) {
adapter = new ContactListAdapter(this, list, alphabeticBar);
contactList.setAdapter(adapter);
alphabeticBar.init(ContactListActivity.this);
alphabeticBar.setListView(contactList);
alphabeticBar.setHight(alphabeticBar.getHeight());
alphabeticBar.setVisibility(View.VISIBLE);
自定义组件:
package com.suntek.contact.
import android.content.C
import android.util.AttributeS
import android.view.MotionE
import android.widget.LinearL
public class SlidingLinearLayout extends LinearLayout {
public SlidingLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev);
/Contact_Demo/src/com/suntek/contact/view/QuickAlphabeticBar.java
package com.suntek.contact.
import java.util.HashM
import android.app.A
import android.content.C
import android.graphics.C
import android.graphics.C
import android.graphics.P
import android.graphics.T
import android.os.H
import android.util.AttributeS
import android.view.MotionE
import android.view.V
import android.widget.ImageB
import android.widget.ListV
import android.widget.TextV
import com.suntek.contact.R;
* 字母索引条
* @author Administrator
public class QuickAlphabeticBar extends ImageButton {
private TextView mDialogT // 中间显示字母的文本框
private Handler mH // 处理UI的句柄
private ListView mL // 列表
private float mH // 高度
// 字母列表索引
private String[] letters = new String[] { "#", "A", "B", "C", "D", "E",
"F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z" };
// 字母索引哈希表
private HashMap&String, Integer& alphaI
Paint paint = new Paint();
boolean showBkg =
int choose = -1;
public QuickAlphabeticBar(Context context) {
super(context);
public QuickAlphabeticBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
public QuickAlphabeticBar(Context context, AttributeSet attrs) {
super(context, attrs);
public void init(Activity ctx) {
mDialogText = (TextView) ctx.findViewById(R.id.fast_position);
mDialogText.setVisibility(View.INVISIBLE);
mHandler = new Handler();
// 设置需要索引的列表
public void setListView(ListView mList) {
this.mList = mL
// 设置字母索引哈希表
public void setAlphaIndexer(HashMap&String, Integer& alphaIndexer) {
this.alphaIndexer = alphaI
// 设置字母索引条的高度
public void setHight(float mHight) {
this.mHight = mH
public boolean onTouchEvent(MotionEvent event) {
int act = event.getAction();
float y = event.getY();
final int oldChoose =
// 计算手指位置,找到对应的段,让mList移动段开头的位置上
int selectIndex = (int) (y / (mHight / letters.length));
if (selectIndex & -1 && selectIndex & letters.length) { // 防止越界
String key = letters[selectIndex];
if (alphaIndexer.containsKey(key)) {
int pos = alphaIndexer.get(key);
if (mList.getHeaderViewsCount() & 0) { // 防止ListView有标题栏,本例中没有
this.mList.setSelectionFromTop(
pos + mList.getHeaderViewsCount(), 0);
this.mList.setSelectionFromTop(pos, 0);
mDialogText.setText(letters[selectIndex]);
switch (act) {
case MotionEvent.ACTION_DOWN:
if (oldChoose != selectIndex) {
if (selectIndex & 0 && selectIndex & letters.length) {
choose = selectI
invalidate();
if (mHandler != null) {
mHandler.post(new Runnable() {
public void run() {
if (mDialogText != null
&& mDialogText.getVisibility() == View.INVISIBLE) {
mDialogText.setVisibility(VISIBLE);
case MotionEvent.ACTION_MOVE:
if (oldChoose != selectIndex) {
if (selectIndex & 0 && selectIndex & letters.length) {
choose = selectI
invalidate();
case MotionEvent.ACTION_UP:
choose = -1;
if (mHandler != null) {
mHandler.post(new Runnable() {
public void run() {
if (mDialogText != null
&& mDialogText.getVisibility() == View.VISIBLE) {
mDialogText.setVisibility(INVISIBLE);
return super.onTouchEvent(event);
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int height = getHeight();
int width = getWidth();
int sigleHeight = height / letters. // 单个字母占的高度
for (int i = 0; i & letters. i++) {
paint.setColor(Color.WHITE);
paint.setTextSize(20);
paint.setTypeface(Typeface.DEFAULT_BOLD);
paint.setAntiAlias(true);
if (i == choose) {
paint.setColor(Color.parseColor("#00BFFF")); // 滑动时按下字母颜色
paint.setFakeBoldText(true);
// 绘画的位置
float xPos = width / 2 - paint.measureText(letters[i]) / 2;
float yPos = sigleHeight * i + sigleH
canvas.drawText(letters[i], xPos, yPos, paint);
paint.reset();
文章:13篇
阅读:496035
文章:13篇
阅读:46658
文章:10篇
阅读:92693
文章:11篇
阅读:221620
文章:14篇
阅读:412006
阅读:88312
阅读:92727
文章:27篇
阅读:84686
从入门到成长到成熟再到优秀,大多数程序员走了前面一段相似的道路,而有些人却走得更远一些!!!!百度知道 - 全球最大中文互动问答平台差不多的wwWfff20是什么,刚刚浏览的fff20cOm怎么不显示了_百度知道
差不多的wwWfff20是什么,刚刚浏览的fff20cOm怎么不显示了
我有更好的答案
切换下域名el6.k1s.biz就好了
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Recommended
新闻值班 电话:
o Politics
o Economic
Legislation
Image center
相关网站链接
重庆地方网媒
友情网站链接
本网站所刊登的新华社及新华网各种新闻﹑信息和各种专题专栏资料,均为新华通讯社版权所有,未经协议授权,禁止下载使用。
Copyright & 2000 - 2017 cq.xinhuanet.com All Rights Reserved.
 | 制作单位:新华网股份有限公司重庆分公司}

我要回帖

更多关于 信息录入页面模板 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信