안녕하세요.
import android.provider.Contacts; 와 import android.provider.Contacts.People; 의 Contacts 부터 줄 그어지는 것 처리하는 문제와
주소록에서 상세화면 콜하는 intent 사용법에 대해서 질문드려요!
주소록에서 Content Provider 이용해서 읽어온 후에 리스트뷰로 뿌려주는걸 만들고 있는데요.
contacts = Contacts.People.CONTENT_URI;
cursor = managedQuery(contacts, projection1, null, null, Contacts.People.NAME + " ASC");
이런식으로 불러와서 리스트에 뿌려주고 있는데요.
첫번째 질문은 위 소스에서 Contacts.People 부분이 가운데 줄 그어져서 보이네요.
현재 버전에서는 없어진 부분이라 그렇게 뜬다던데 이 부분을 없애려면 어떻게 해야할까요?
그냥 contacts = CONTENT_URI; 이렇게 쓰면 당연히 에러가 나더군요;;;;
두번째 질문으로 intent 이용해서 주소록 띄울때
private void viewConversation(int position ){
cursor.moveToPosition(position);
String sTableId = cursor.getString(cursor.getColumnIndex(Contacts.People._ID));
long lTableId = cursor.getLong(cursor.getColumnIndex(Contacts.People._ID));
Log.i("sTableId", sTableId);
//MakeDialog.showOneBtn(AddressList.this, R.drawable.icon, "ConversationView 이동", sTableId + "준비중입니다.");
Intent i = new Intent(Intent.ACTION_PICK);
i.setData(Uri.parse("content://contacts/lookup/" + lTableId));
startActivity(i);
//Uri mContact = ContentUris.withAppendedId(People.CONTENT_URI, lTableId );
} 이렇게 값을 주면 주소록 리스트가 뜨는데요. 주소록 리스트가 아니라
안드로이드 기본 주소록 리스트에서 한 명 클릭하면 휴대전화로 전화하기, 이메일 보내기 등이 뜨는 창을
띄우고 싶습니다.
i.setData(Uri.parse("content://contacts/lookup/" + _id값));
i.setData(Uri.parse("content://contacts/people/" + _id값));
둘 다 안먹히네요.
lookup 은 디버깅걸고 안드로이드 기본 주소록에서 클릭해가면서 보니까 이 부분을 바꾸면 되는건가 싶어서
시도해본 부분입니다.
발생하는 에러는
04-08 08:26:15.827: ERROR/DatabaseUtils(100): Writing exception to parcel
04-08 08:26:15.827: ERROR/DatabaseUtils(100): java.lang.IllegalArgumentException: Unknown URI
04-08 08:26:15.827: ERROR/DatabaseUtils(100): at com.android.providers.contacts.LegacyApiSupport.getType(LegacyApiSupport.java:2035)
04-08 08:26:15.827: ERROR/DatabaseUtils(100): at com.android.providers.contacts.ContactsProvider2.getType(ContactsProvider2.java:4787)
04-08 08:26:15.827: ERROR/DatabaseUtils(100): at android.content.ContentProvider$Transport.getType(ContentProvider.java:144)
04-08 08:26:15.827: ERROR/DatabaseUtils(100): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:127)
04-08 08:26:15.827: ERROR/DatabaseUtils(100): at android.os.Binder.execTransact(Binder.java:287)
04-08 08:26:15.827: ERROR/DatabaseUtils(100): at dalvik.system.NativeStart.run(Native Method)
04-08 08:26:15.857: INFO/ActivityManager(52): Starting activity: Intent { act=android.intent.action.PICK dat=content://contacts/lookup/2 }
04-08 08:26:15.866: DEBUG/AndroidRuntime(277): Shutting down VM
04-08 08:26:15.866: WARN/dalvikvm(277): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
04-08 08:26:15.866: ERROR/AndroidRuntime(277): Uncaught handler: thread main exiting due to uncaught exception
04-08 08:26:15.887: ERROR/AndroidRuntime(277): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.PICK dat=content://contacts/lookup/2 }
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.app.Activity.startActivityFromChild(Activity.java:2989)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.app.Activity.startActivityForResult(Activity.java:2769)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.app.Activity.startActivity(Activity.java:2855)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at kr.co.hatsal.AddressList.viewConversation(AddressList.java:193)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at kr.co.hatsal.AddressList.onListItemClick(AddressList.java:180)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.app.ListActivity$2.onItemClick(ListActivity.java:312)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.widget.ListView.performItemClick(ListView.java:3285)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.os.Handler.handleCallback(Handler.java:587)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.os.Handler.dispatchMessage(Handler.java:92)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.os.Looper.loop(Looper.java:123)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at android.app.ActivityThread.main(ActivityThread.java:4338)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at java.lang.reflect.Method.invokeNative(Native Method)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at java.lang.reflect.Method.invoke(Method.java:521)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-08 08:26:15.887: ERROR/AndroidRuntime(277): at dalvik.system.NativeStart.main(Native Method)
에러입니다.
한 명에 해당하는 안드로이드 주소록 상세화면을 어떻게 띄우는지
아시거나 어디서 확인할 수 있는지 아시는 분은 꼭 좀 알려주세요 ㅜ.ㅜ
글을 읽어주시는 모든 분들 감사드리고 항상 행복하세요.
ps. 헉 제가 code highlighter를 처음써봐서 이상하게 올라갔네요. 지우는 법도 모르겠네요. ㅜ.ㅜ




자답다는 것을 잊고 있었네요. 얼마전에 해결했는데요.
일단 contacts = Contacts.People.CONTENT_URI; 의 people 부분은 2.0.1부터 없어져서 import android.provider.ContactsContract.Contacts;
쪽으로 들어갔네요.
주소록 상세화면은
Intent i = new Intent(Intent.ACTION_VIEW);
Uri ui = Contacts.CONTENT_URI;
i.setData(Uri.parse(ui+"/"+_id));
activity.startActivity(i);
와 같은 식으로 uri 뒤에 id 만 붙여서 콜해주시면 되요.