最近在做一个联系人列表这方面的东西,遇到了中文联系人按拼音排序的问题。看到了android项目源码里面有一个叫“ContactLocaleUtils”的类正好可以拿来用,怎么引用?类的地址:http://android.git.kernel.org/?p=platform/packages/providers/ContactsProvider.git;a=blob;f=src/com/android/providers/contacts/ContactLocaleUtils.java;h=1c2ad979efdef07f7bcc2354e8f5656c51b8dd51;hb=HEAD有人知道么?求解答~

解决方案 »

  1.   

    我尝试过反射系统apk包里面的类,如下: DexFile file = new DexFile("/system/app/ContactsProvider2_0.apk");
    ClassLoader loader = getClassLoader();
    Class<?> clz = file
    .loadClass(
    "com.android.providers.contacts.ContactLocaleUtils",
    loader);
    Class<?>[] para = new Class[2];
    para[0] = String.class;
    para[1] = Integer.class;
    Method m = clz.getMethod("getSortKey", para);
    Object[] o = new Object[2];
    o[0] = new String("displayName");
    o[1] = new Integer(3);
    pinyin = m.invoke(m, o).toString();
    报"NoSuchMethodException"异常~坑爹了~
      

  2.   


    这只是没有办法的办法,我是想能不能有更好的办法~比如 重新编译一个SDK,或者其他什么的……
      

  3.   

    为什么不把 ContactLocaleUtils 这个类的源码加入到你的工程呢
      

  4.   

    反射应该是比较合适的做法。
    你的出错,我觉得是para[1] = Integer.class;这行有问题,对应的函数的定义是String getSortKey(String displayName, int nameStyle),int和integer应该是不同的东西吧。
      

  5.   

    算了,算了,结贴散分了~最终还是把android的 *.java 加到了我的项目里~