안 드 로 이 드 모 바 일 가 디 언 스 의 연락처 정보 표시 및 표시
시스템 연락처 읽 기
"연락처 선택"단 추 를 누 르 면 연락처 목록 이 나타 나 고 시스템 연락 처 를 읽 는 데 다음 과 같은 몇 가지 절차 가 있 습 니 다.
시스템 연락 처 는 콘 텐 츠 분석 기 를 통 해 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);
}
});
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.