打开联系人的问题 - Android

Tof*_*ira 2 android android-intent android-contacts

我在我的应用中添加了一个功能,可以打开联系人列表.问题是有些用户报告说应用程序在尝试使用时崩溃了.该功能似乎适用于大多数人(包括Nexus S).

这是我用来打开联系人的代码 -

    call_friend.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent i = new Intent();
            i.setComponent(new ComponentName("com.android.contacts", "com.android.contacts.DialtactsContactsEntryActivity"));
            i.setAction("android.intent.action.MAIN");
            i.addCategory("android.intent.category.LAUNCHER");
            i.addCategory("android.intent.category.DEFAULT");
            startActivity(i);
        }
    }); 
Run Code Online (Sandbox Code Playgroud)

这是崩溃的日志 -

            android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.contacts/com.android.contacts.DialtactsContactsEntryActivity}; have you declared this activity in your AndroidManifest.xml?
            at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
            at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
            at android.app.Activity.startActivityForResult(Activity.java:2817)
            at android.app.Activity.startActivity(Activity.java:2923)
            at can.you.drive.dont_drive$1.onClick(dont_drive.java:75)
            at android.view.View.performClick(View.java:2465)
            at android.view.View$PerformClick.run(View.java:8907)
            at android.os.Handler.handleCallback(Handler.java:587)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:123)
            at android.app.ActivityThread.main(ActivityThread.java:4627)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:521)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
            at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

我不知道是什么导致了它.谢谢!

Eri*_*ikR 13

使用隐式Intent启动Contacts活动 - 即告诉要查看联系人列表的操作系统,它将确定要使用的正确活动(如果安装了多个联系人应用程序,则提示用户).以下Intent可以解决这个问题:

Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.setData(Uri.parse("content://contacts/people/"));
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

尽可能避免使用显式Intent ...有太多不同的设备可以绝对确保特定的包/活动始终存在.