2011-06-03 74 views
2

我已經把我的應用程序功能,打開聯繫人列表。 問題是,有些用戶報告說,他們試圖使用它時,應用程序崩潰。 該功能似乎適用於大多數人(我包括Nexus S)。問題與斷開觸點 - Android電子

下面是我用來打開接觸碼 -

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) 

我不知道是什麼導致了它。 謝謝!

+0

受影響的用戶不會碰巧在平板電腦上,他們會嗎?如果沒有,哪個操作系統版本? – ErikR 2011-06-03 17:52:22

+0

我還想補充一下,Erik的問題是「哪種設備?」;代碼似乎假定標準的Android聯繫人應用程序將在設備,這可能不總是這樣的情況(例如,如果製造商已經用自己的一個替代標準的應用程序) – Mark 2011-06-03 18:24:38

+0

我真的什麼都不知道上安裝關於它,除了發生在Galaxy S上(因爲我自己嘗試過)。我沒有任何有關操作系統版本或其他設備的信息。 – Tofira 2011-06-03 19:19:19

回答

13

使用隱含意圖發動聯繫人活動 - 如果安裝了多個聯繫人應用程序,即告訴您要查看的聯繫人列表中的操作系統,它會找出使用權的活動(或提示用戶)。下面意圖將這樣的伎倆:

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

儘量避免明確的意圖儘可能......太多不同的設備在那裏,以絕對確保特定軟件包/活動將一直存在。

1

由於您在上面指出Galaxy S遇到問題,因此您應該查看Galaxy S here上聯繫人應用的Android清單。看着這個,沒有DialtactsContactsEntry Activity,這會解釋你所看到的。根據清單以及本message另一個論壇上,你就需要在這種情況下使用的是「com.sec.android.app.contacts.PhoneBookTopMenuActivity」。這只是涵蓋了Galaxy S的情況下 - 擁有自己的聯繫方式更換將可能有完全不同的東西,有沒有保證,Galaxy系列的下一個轉也不會選擇來改變這種其他設備。整個練習強調了使用未公開的API /應用程序功能的固有問題......更好的方法是使用類似ErikR所描述的那樣的東西回答。

1

我想這是因爲Android的更改此應用程序的數量。我有類似的問題,如果我使用

intent.setClassName("com.android.contacts","com.android.contacts.DialtactsActivity"); 

它可以運行在Android 4.1,但不是在4.4。在4.4中,我必須像這樣改變它

intent.setClassName("com.google.android.dialer","com.android.dialer.DialtactsActivity");