最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android使用AsyncQueryHandler實現(xiàn)獲取手機聯(lián)系人功能

 更新時間:2017年07月20日 11:10:57   作者:zhonglunshun  
這篇文章主要為大家詳細介紹了Android使用AsyncQueryHandler實現(xiàn)獲取手機聯(lián)系人功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

利用AsyncQueryHandler能異步任務獲取手機聯(lián)系人,增加用戶體驗,使用起來也很方便。不多說,上干貨。

布局文件main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:orientation="vertical" 
  tools:ignore="HardcodedText" > 
  <Button 
    android:id="@+id/bt_getCantacts" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="獲取聯(lián)系人信息" /> 
</LinearLayout> 

contact.java 聯(lián)系人bean文件

package com.larson.cantact; 
public class Contact { 
  private int contactId;//聯(lián)系人ID 
  private String displayName;//聯(lián)系人姓名 
  private String phoneNum;//聯(lián)系人手機號 
  private String sortKey;//排序Key 
  private Long photoId;//頭像ID 
  private String lookUpKey; 
  private int selected = 0;//被選中的行號 
  private String formattedNumber;//被格式化的號碼 
  private String pinyin;//姓名對應的漢語拼音 
                                                                                              
  public int getContactId() { 
    return contactId; 
  } 
  public void setContactId(int contactId) { 
    this.contactId = contactId; 
  } 
  public String getDisplayName() { 
    return displayName; 
  } 
  public void setDisplayName(String displayName) { 
    this.displayName = displayName; 
  } 
  public String getPhoneNum() { 
    return phoneNum; 
  } 
  public void setPhoneNum(String phoneNum) { 
    this.phoneNum = phoneNum; 
  } 
  public String getSortKey() { 
    return sortKey; 
  } 
  public void setSortKey(String sortKey) { 
    this.sortKey = sortKey; 
  } 
  public Long getPhotoId() { 
    return photoId; 
  } 
  public void setPhotoId(Long photoId) { 
    this.photoId = photoId; 
  } 
  public String getLookUpKey() { 
    return lookUpKey; 
  } 
  public void setLookUpKey(String lookUpKey) { 
    this.lookUpKey = lookUpKey; 
  } 
  public int getSelected() { 
    return selected; 
  } 
  public void setSelected(int selected) { 
    this.selected = selected; 
  } 
  public String getFormattedNumber() { 
    return formattedNumber; 
  } 
  public void setFormattedNumber(String formattedNumber) { 
    this.formattedNumber = formattedNumber; 
  } 
  public String getPinyin() { 
    return pinyin; 
  } 
  public void setPinyin(String pinyin) { 
    this.pinyin = pinyin; 
  } 
} 

MainActivity.java

package com.larson.cantact; 
import java.util.ArrayList; 
import android.app.Activity; 
import android.content.AsyncQueryHandler; 
import android.content.ContentResolver; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.provider.ContactsContract; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
public class MainActivity extends Activity { 
  private Button myCantacts; 
  private AsyncQueryHandler asyncQuery; 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    myCantacts = (Button) this.findViewById(R.id.bt_getCantacts); 
    myCantacts.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        asyncQuery = new MyAsyncQueryHandler(getContentResolver()); 
        initSQL(); 
      } 
    }); 
  } 
  protected void initSQL() { 
    // 聯(lián)系人URI 
    Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
    // 聯(lián)系人ID,聯(lián)系人NAME, 
    String[] projection = { ContactsContract.CommonDataKinds.Phone._ID, 
        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
        ContactsContract.CommonDataKinds.Phone.DATA1, "sort_key", 
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID, }; 
    asyncQuery.startQuery(0, null, uri, projection, null, null, 
        "sort_key COLLATE LOCALIZED asc"); 
  } 
  private class MyAsyncQueryHandler extends AsyncQueryHandler { 
    public MyAsyncQueryHandler(ContentResolver cr) { 
      super(cr); 
    } 
    protected void onQueryComplete(int token, Object cookie, Cursor cursor) { 
      querying(cursor); 
    } 
  } 
  private void querying(final Cursor cursor) { 
    Handler handlerInsertOrder = new Handler() { 
      public void handleMessage(Message msg) { 
        switch (msg.what) { 
        case MyAsyncTask.DOWNLOADING_START_MESSAGE: 
          System.out.println("begin to sort out t9"); 
          break; 
        case MyAsyncTask.DOWNLOAD_END_MESSAGE: 
          Bundle bundle1 = msg.getData(); 
          ArrayList<ContactBean> list = (ArrayList<ContactBean>) bundle1 
              .get("完成"); 
          for (ContactBean ci : list) { 
            System.out.println(ci.getDisplayName()); 
            System.out.println(ci.getPhoneNum()); 
            System.out.println("--------------------------------"); 
          } 
          break; 
        default: 
          break; 
        } 
        super.handleMessage(msg); 
      } 
    }; 
    MyAsyncTask.startRequestServerData(this, handlerInsertOrder, cursor); 
  } 
} 

自定義的MyAsyncTask.java

package com.anjoyo.cantact; 
import java.util.ArrayList; 
import android.content.Context; 
import android.database.Cursor; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
public class MyAsyncTask extends 
    AsyncTask<Cursor, Void, ArrayList<ContactBean>> { 
  /** 開始整理 */ 
  public static final int DOWNLOADING_START_MESSAGE = 7; 
  /** 整理結(jié)束 */ 
  public static final int DOWNLOAD_END_MESSAGE = 17; 
  private Context mContext = null; 
  private Handler mHandler = null; 
  protected MyAsyncTask(Context context, Handler handler) { 
    this.mContext = context; 
    this.mHandler = handler; 
  } 
  @Override 
  protected void onPreExecute() { 
    sendStartMessage(DOWNLOADING_START_MESSAGE); 
  } 
  @Override 
  protected ArrayList<ContactBean> doInCursor... params) { 
    // 只需要把原來放在子線程的代碼放到這個方法就行 
    Cursor cursor = params[0]; 
    ArrayList<ContactBean> ciList = new ArrayList<ContactBean>(); 
    if (cursor != null && cursor.getCount() > 0) { 
      try { 
        cursor.moveToFirst(); 
        for (int i = 0; i < cursor.getCount(); i++) { 
          cursor.moveToPosition(i); 
          String name = cursor.getString(1); 
          String number = cursor.getString(2); 
          int contactId = cursor.getInt(4); 
          ContactBean contactInfo = new ContactBean(); 
          contactInfo.setContactId(contactId); 
          contactInfo.setPhoneNum(number); 
          contactInfo.setDisplayName(name); 
          if (contactInfo.getDisplayName() == null) { 
            contactInfo.setDisplayName(contactInfo.getPhoneNum()); 
          } 
                                             
          ciList.add(contactInfo); 
        } 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
    } 
    return ciList; 
  } 
  @Override 
  protected void onPostExecute(ArrayList<ContactBean> result) { 
    sendEndMessage(DOWNLOAD_END_MESSAGE, result); 
  } 
  public static void startRequestServerData(Context context, Handler handler, 
      Cursor cursor) { 
    new MyAsyncTask(context, handler).execute(cursor); 
  } 
  /** 
   * 發(fā)送開始整理消息 
   * 
   * @param messageWhat 
   */ 
  private void sendStartMessage(int messageWhat) { 
    Message message = new Message(); 
    message.what = messageWhat; 
    if (mHandler != null) { 
      mHandler.sendMessage(message); 
    } 
  } 
  /** 
   * 發(fā)送整理結(jié)束消息 
   * 
   * @param messageWhat 
   */ 
  private void sendEndMessage(int messageWhat, ArrayList<ContactBean> result) { 
    Message message = new Message(); 
    message.what = messageWhat; 
    Bundle bundle = new Bundle(); 
    bundle.putSerializable("完成", result); 
    message.setData(bundle); 
    if (mHandler != null) { 
      mHandler.sendMessage(message); 
    } 
  } 
} 

 小工具,供人參考,方便廣大程序員,歡迎指正。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android設備上非root的抓包實現(xiàn)方法(Tcpdump方法)

    Android設備上非root的抓包實現(xiàn)方法(Tcpdump方法)

    通常我們在Android應用中執(zhí)行某個命令時會使用“Runtime.getRuntime().exec("命令路徑")”這種方式,但是當我們執(zhí)行抓包操作時,使用這條命令無論如何都不行,通過下面代碼打印結(jié)果發(fā)現(xiàn),該命令一定要在root權(quán)限下才能執(zhí)行,具體實現(xiàn)思路,請參考本教程
    2016-11-11
  • android多媒體類VideoView使用方法詳解

    android多媒體類VideoView使用方法詳解

    這篇文章主要為大家詳細介紹了android多媒體類VideoView使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Android自制九宮格解鎖控件

    Android自制九宮格解鎖控件

    這篇文章主要為大家詳細介紹了Android自制九宮格解鎖控件的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 30條android項目開發(fā)技巧與經(jīng)驗總結(jié)

    30條android項目開發(fā)技巧與經(jīng)驗總結(jié)

    本文為大家總結(jié)了30條android項目開發(fā)技巧與經(jīng)驗,,需要的朋友可以參考下
    2018-04-04
  • android球形水波百分比控件代碼

    android球形水波百分比控件代碼

    本篇文章主要是介紹android球形水波百分比控件,現(xiàn)在很多地方都能用的,有需要的可以來了解一下。
    2016-11-11
  • flutter ExpansionTile 層級菜單的實現(xiàn)

    flutter ExpansionTile 層級菜單的實現(xiàn)

    這篇文章主要介紹了flutter ExpansionTile 層級菜單的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • android adb實用命令小結(jié)

    android adb實用命令小結(jié)

    adb對于Android程序員來說在日常的工作中使用頻率很高,現(xiàn)將自己工作中常用的adb命令總結(jié)一下備忘,方便查詢,也供大家參考
    2017-04-04
  • Android圖片色彩變換實現(xiàn)方法

    Android圖片色彩變換實現(xiàn)方法

    這篇文章主要為大家詳細介紹了Android圖片色彩變幻實現(xiàn)方法,一般就是換個色彩度,飽和度,亮度,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android?Gradle?插件自定義Plugin實現(xiàn)注意事項

    Android?Gradle?插件自定義Plugin實現(xiàn)注意事項

    這篇文章主要介紹了Android?Gradle?插件自定義Plugin實現(xiàn)注意事項,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-06-06
  • Flutter手勢密碼的實現(xiàn)示例(附demo)

    Flutter手勢密碼的實現(xiàn)示例(附demo)

    本文主要介紹了Flutter手勢密碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

天水市| 察隅县| 靖江市| 岑溪市| 准格尔旗| 武城县| 兴化市| 潞西市| 普陀区| 青浦区| 新兴县| 涞水县| 临泉县| 东乡县| 固始县| 天柱县| 曲松县| 陇西县| 吉林省| 绥滨县| 内丘县| 武强县| 库伦旗| 乌拉特后旗| 南乐县| 罗江县| 岳池县| 德惠市| 建阳市| 铁岭市| 清水县| 浦北县| 祥云县| 锦州市| 惠州市| 洮南市| 临高县| 中西区| 贵州省| 华安县| 乐安县|