현재 문자가 오면 문자를 뿌려주는데 전화번호부에 있는 사람은 전화번호부를 탐색해서 이름을 띄어주는 부분을 만들고 있습니다.
아래 부분은 문자가 왔을때 BroadcastReceiver로 받고 나서 뿌려주는 부분입니다.
//smsFrom=01012345678 같이 문자가 온 번호입니다.
//문자가 온 번호를 sms에 삽입합니다.
String sms = getIntent().getExtras().getString("smsFrom");
//버전을 체크
int sdkVersion = Integer.parseInt(Build.VERSION.SDK);
//2.0미만 버전일때.. 이부분은 잘 돌아갑니다.
if (sdkVersion < Build.VERSION_CODES.ECLAIR) {
String[] projection = new String[]{
People._ID,
People.NAME,
People.NUMBER
};
Uri contacts =People.CONTENT_URI;
Cursor cur=managedQuery(contacts, projection, null, null, null);
if (cur.moveToFirst()) {
String name;
String phoneNumber;
int nameColumn = cur.getColumnIndex(People.NAME);
int phoneColumn = cur.getColumnIndex(People.NUMBER);
do {
// Get the field values
name = cur.getString(nameColumn);
phoneNumber = cur.getString(phoneColumn);
// Do something with the values.
//만약 sms가 온 번호가 있다면 이름을 sms에 넣어줍니다.
if(phoneNumber.equals(sms)){
sms=name;
}
}while (cur.moveToNext());
}
}
//2.0이상버전일때 부분인데 어떤식으로 접근해야 할지 잘 모르겠네요..
else{
Cursor cur = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, // Data.CONTENT_URI,
new String[] { ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME},
null,
null,
null);
if(cur.getColumnCount()>0){
//String name;
String phoneNumber;
int nameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
int phoneColumn = cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
while(cur.moveToNext()){
name = cur.getString(nameColumn);
Log.i("TRACE",name);
phoneNumber = cur.getString(phoneColumn);
Log.i("TRACE",phoneNumber);
}
}
}
//이름 같은 경우에는 쉽게 접근이 가능한데.. 전화번호 부분 하는 부분이 너무 어렵네요..
에러가
05-19 01:27:08.615: ERROR/CursorWindow(10561): Bad request for field slot 0,-1. numRows = 1, numColumns = 2
이런데..
아마.. 핸드폰 Type랑 번호 이런게 동시에 받아져서 그런가요?
아무튼.. 문자열을 받아서 번호와 비교해서 그 번호의 저장된 이름을 받는 방법좀 알려주세요.ㅜ