有许多人提过这个问题了,可我还是不知道怎么解决,我太菜了,,,
问题:中文联系人写入SIM后读出来的却是空的,也没找到什么好的SIM联系人导入软件就只能自己写了
connent://acc/adn这个链接好像也只是个临时区,在飞行模式打开之后关闭(或者重启手机)重新启用SIM卡后这个表的数据才发生变化我需要几行实例代码,功能是写入一个联系人: 张三 10086并且在手机重启之后仍然可以正常读取如果读取的过程也需要自定义,那么麻烦请把读取的代码也贴下【环境最好是1.5(API3)】
谢了

解决方案 »

  1.   

    http://topic.csdn.net/u/20110309/12/7a5693b7-22e7-40a1-a862-c058a5a49fdd.html
      

  2.   

    不好意思,那个帖我看了很多遍了,好像也都试了,没用
    我想要大致这样的形式的
    void insertSimNum(String sName,String sNum){
       ...
    }至于读取,我想过了,还是不能完全自定义的,因为SIM卡上的联系人信息也必须能在其他手机上使用
      

  3.   

    在AdnRecord.java中
      if (!TextUtils.isEmpty(alphaTag)) {
      byteTag = GsmAlphabet.stringToGsm8BitPacked(alphaTag);
      System.arraycopy(byteTag, 0, adnString, 0, byteTag.length);
      }
    GsmAlphabet.stringToGsm8BitPacked这个函数是关键函数
    你下个断点,自己能跟到这,就知道是怎么回事的了
      

  4.   

    好人做到底吧
    转JAVA string字符串成ucs2字符串的函数。
         /******
          *  @hide
          *  @param gbString
          * @return
          */    public static byte[] gbEncoding(final String gbString) { byte[] result = null;
    result = new byte[gbString.length() * 2 + 1];
    result[0] = (byte) 0x80;
    for (int i = 0; i < gbString.length(); i++) { char c = (char) gbString.charAt(i);
    char tmp = c;
    result[2 * i + 1] = (byte) (c >> 8);
    result[2 * i + 2] = (byte) tmp;
    }
    return result; }修改这一段代码:
      if (!TextUtils.isEmpty(alphaTag)) {
      byteTag = GsmAlphabet.stringToGsm8BitPacked(alphaTag);
      System.arraycopy(byteTag, 0, adnString, 0, byteTag.length);
      }
    改成            if(isAlphabet(alphaTag)){
                 byteTag = GsmAlphabet.stringToGsm8BitPacked(alphaTag);
                 }else{
                 if (alphaTag.length() >= 7) {
                 Log.w(LOG_TAG,
                 "[buildAdnString] Max length of Chinese tag is " + 6);
                 return null;
                 }
                 byteTag = gbEncoding(alphaTag);
                 }isAlphabet函数判断要存进sim卡的名字是不是全是ascill字符,是则调用系统原本默认的函数,否则把字符串转成sim卡能支持的USC2字符串
      

  5.   

    我太菜了对不起前辈,,我不知道怎么改framework层能否麻烦告知
      

  6.   

    up         a
      

  7.   

    我前一段时间也一直纠结这个问题,把联系人写入sim卡,用connent://acc/adn这个uri写进sim卡,手机重启才能读取,但我见有真机已经实现了copy to sim的功能
    http://topic.csdn.net/u/20110309/12/7a5693b7-22e7-40a1-a862-c058a5a49fdd.html
    这个帖子我也看过了,我现在好奇的就是那个SIM_CONTACTS_URI到底是什么?发帖人没分享我想这个SIM_CONTACTS_URI是不是指向一个专门为sim卡写的ContentProvider?欢迎大家讨论这个问题,知道的人指点一二
      

  8.   

    这问题,就是android一个bug,和1.0时,G1无法发送中文短信一个道理,换UCS2编码就行了
      

  9.   

    楼主解决问题没有?我找个问题找了好久,还是不行。也是不会改framework的