2

連絡先リストを開く機能をアプリに追加しました。問題は、一部のユーザーがアプリを使用しようとしたときにアプリがクラッシュしたと報告したことです。この機能は、ほとんどの人にとって問題なく動作するようです (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);
        }
    }); 

これがクラッシュのログです -

            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)

何が原因なのかわかりません。ありがとう!

4

3 に答える 3

13

暗黙的なインテントを使用して連絡先アクティビティを起動します。つまり、OS に連絡先のリストを表示するように指示すると、使用する適切なアクティビティが特定されます (複数の連絡先アプリがインストールされている場合は、ユーザーにプロンプ​​トが表示されます)。次のインテントでうまくいきます。

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

可能な限り明示的なインテントを避けるようにしてください...特定のパッケージ/アクティビティが常に存在することを絶対に確認するには、さまざまなデバイスが多すぎます。

于 2011-06-03T21:00:29.523 に答える
1

上記で Galaxy S に問題が発生していると指摘したため、Galaxy S の連絡先アプリの Android マニフェストと思われるものをこちらで確認する必要があります。これを見ると、何が表示されているかを説明する DialtactsContactsEntry アクティビティはありません。マニフェストと別のフォーラムのこのメッセージに基づいて、この場合に使用する必要があるのは「com.sec.android.app.contacts.PhoneBookTopMenuActivity」です。これは、Galaxy S のケースをカバーするだけです。独自の連絡先の代替品を備えた他のデバイスでは、まったく異なるものになる可能性があり、Galaxy ラインの次のリビジョンでこれが変更されないという保証はありません.

もちろん (そして、これはあなたにとってニュースではないと確信しています)、演習全体は、文書化されていない API/アプリケーション機能を使用する際の固有の問題を強調しています...より良いアプローチは、ErikR が彼の回答で説明したようなものを使用することです。

于 2011-06-03T20:23:06.143 に答える