안 드 로 이 드 모 바 일 가 디 언 스 의 연락처 정보 표시 및 표시

7555 단어 Android연락처
앞의 글 은 이미 관련 구 조 를 실현 하 였 고 본 고 는 이어서 관련 기능 을 실현 하 였 다.

시스템 연락처 읽 기
"연락처 선택"단 추 를 누 르 면 연락처 목록 이 나타 나 고 시스템 연락 처 를 읽 는 데 다음 과 같은 몇 가지 절차 가 있 습 니 다.
시스템 연락 처 는 콘 텐 츠 분석 기 를 통 해 Url 주소 와 일치 하 는 콘 텐 츠 공급 자 를 제공 합 니 다.
1.내용 해석 기
2.Url 주소,시스템 연락처 데이터베이스,콘 텐 츠 제공 자 소스 코드 보기
api 문서 의 목록 파일 을 먼저 보고 자바 류(연락처 데이터베이스 에 표 가 여러 장 있 음)를 봅 니 다.
contents://com.android.contacts/시계
3.시스템 연락처 데이터베이스 의 핵심 표 구조
raw_연락처 연락처 표:contactid 연락처 유일 성 id 값
data 사용자 정보 표:rawcontact_id 를 외부 키 로 하고 rawcontacts 중 contactid 관련 검색
데이터 1 필드 가 져 오기,전화번호 및 연락처 이름 포함
mimetype_id 필드,현재 줄 데이터 1 에 대응 하 는 데이터 형식 포함
mimetypes 형식 표: data 표 에서 mimetype 가 져 오기id 와 mimetypes 중id 관련 조회,가리 키 는 정보 형식 가 져 오기
전화번호:vnd.android.cursor.item/phonev2
사용자 이름:vnd.android.cursor.item/name
4.표 접근 방식
content://com.android.contacts/raw_contacts
content://com.android.contacts/data
다음은 코드 로 이 루어 집 니 다.

  private ListView lv_contact;
  private List<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
  private MyAdapter mAdapter;

  private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      //8,       
      mAdapter = new MyAdapter();
      lv_contact.setAdapter(mAdapter);
    }
  };

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contact_list);
    initUI();
    initData();
  }

  class MyAdapter extends BaseAdapter{

    @Override
    public int getCount() {
      return contactList.size();
    }

    @Override
    public HashMap<String, String> getItem(int i) {
      return contactList.get(i);
    }

    @Override
    public long getItemId(int i) {
      return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
      View v = View.inflate(getApplicationContext(), R.layout.listview_contact_item, null);
      TextView tv_name = (TextView)v.findViewById(R.id.tv_name);
      TextView tv_phone = (TextView)v.findViewById(R.id.tv_phone);
      tv_name.setText(getItem(i).get("name"));
      tv_phone.setText(getItem(i).get("phone"));
      return v;
    }
  }

  /**
   *           
   */
  private void initData() {
    //         ,         ,         
    new Thread(){
      public void run(){
        //1,         
        ContentResolver contentResolver = getContentResolver();
        //2,              (       )
        Cursor cursor = contentResolver.query(
            Uri.parse("content://com.android.contacts/raw_contacts"),
            new String[]{"contact_id"},
            null, null, null);
        contactList.clear();
        //3,    ,        
        while (cursor.moveToNext()){
          String id = cursor.getString(0);
          //4,       id ,  data  mimetype      ,  data  mimetype  
          Cursor indexCursor = contentResolver.query(
              Uri.parse("content://com.android.contacts/data"),
              new String[]{"data1","mimetype"},
              "raw_contact_id = ?", new String[]{id}, null);
          //5,                   ,    
          HashMap<String, String> hashMap = new HashMap<String, String>();
          while (indexCursor.moveToNext()){
            String data = indexCursor.getString(0);
            String type = indexCursor.getString(1);

            //6,      hashMap    
            if(type.equals("vnd.android.cursor.item/phone_v2")) {
              //      
              if(!TextUtils.isEmpty(data)) {
                hashMap.put("phone", data);
              }
            }else if(type.equals("vnd.android.cursor.item/name")) {
              if(!TextUtils.isEmpty(data)) {
                hashMap.put("name", data);
              }
            }
          }
          indexCursor.close();
          contactList.add(hashMap);

        }
        cursor.close();
        //7,    ,        ,                       
        mHandler.sendEmptyMessage(0);
      }

    }.start();
  }

실현 효 과 는 다음 과 같다.

연락처 정보 표시
다음은 연락처 항목 을 클릭 하여 리 셋 을 실현 합 니 다.예 를 들 어 첫 번 째 항목 을 두 번 클릭 하면 번호 가 자동 으로 추 가 됩 니 다.

코드 는 다음 과 같 습 니 다:

  private void initUI() {
    lv_contact = (ListView) findViewById(R.id.lv_contact);
    lv_contact.setOnItemClickListener(new AdapterView.OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        //1,                 
        if(mAdapter != null) {
          HashMap<String, String> hashMap = mAdapter.getItem(i);
          //2,                 
          String phone = hashMap.get("phone");
          //3,                 

          //4,                  ,         
          Intent intent = new Intent();
          intent.putExtra("phone", phone);
          setResult(0, intent);
          finish();

        }
      }
    });
  }

이어서 onActivity Result 에 아래 코드 를 추가 합 니 다.

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(data != null) {
      //1,          ,       
      String phone = data.getStringExtra("phone");
      //2,       (          )
      phone = phone.replace("-", "").replace(" ", "").trim();
      et_phone_number.setText(phone);

      //3,      sp 
      SpUtil.putString(getApplicationContext(), ConstantValue.CONTACT_PHONE, phone);
    }
    super.onActivityResult(requestCode, resultCode, data);
  }

번 호 를 작성 한 후 다음 페이지 에 들 어가 다시 돌아 오 니 번호 가 없어 진 것 을 발견 하고 sp 로 저장 하여 읽 습 니 다.

  private void initUI() {
    //          
    et_phone_number = (EditText)findViewById(R.id.et_phone_number);
    //             
    String contact_phone = SpUtil.getString(this, ConstantValue.CONTACT_PHONE, "");
    et_phone_number.setText(contact_phone);
    bt_select_number = (Button) findViewById(R.id.bt_select_number);
    //           
    bt_select_number.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        Intent intent = new Intent(getApplicationContext(), ContactListActivity.class);
        startActivityForResult(intent, 0);
      }
    });
  }

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기