在文件中用uses-permission分别设置了帐号的读写或校验的权限,并且声明了帐号的管理服务实现类为com.jquerymobile.demo.contact. authentication.AuthenticationService,在这个类中,将编写一些关于帐号管理操作的业务逻辑。这个帐号业务管理器被定义为Android中的一个服务,代码如下:

package com.jquerymobile.demo.contact.authentication;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class AuthenticationService extends Service {
  public IBinder onBind(Intent intent) {
    return null;
  }
}
可以看到,这里跟普通的编写Android服务没什么大的区别,这里在onBind()中并没有编写具体的代码,只是返回了null。但如果你需要将创建的帐号跟一些在线服务结合起来,那么则需要在这里编写相关的实现代码,并且还需要实现android.accounts.AbstractAccountAuthenticator接口。这里我们足够用了,所以返回null。现在,运行程序,在输入帐号并保存后,你会发现在Android 手机中
  的Accounts and sync settings的选项设置中,会发现你刚才新建的帐号,如下图所示:


列出已存在的通讯录

  下面,我们看下,当用户点某个人名的通讯录时,会显示其通讯录的详细情况。先回顾下在本系列教程第一篇中,提到的如下代码:

function setContactsList(jsonText){
    var tmpJson = $.parseJSON(jsonText);
    if(tmpJson != null && tmpJson.contacts != null){
      var tmpContacts = tmpJson.contacts;
      for(i = 0; i < tmpContacts.length; i++){
        var tmpKey = (tmpContacts[i]).key;
        var tmpKeyFragment = '<li data-role="list-divider">'+tmpKey+'</li>';
        contactSelectionsVar.append(tmpKeyFragment);
        var tmpValues = (tmpContacts[i]).values;
        if(tmpValues != null){
          var j;
          for(j = 0; j < tmpValues.length; j++){
            var tmpDisplayName = tmpValues[j].displayName;
            var tmpContactId = tmpValues[j].contactId;
            var tmpLiFragment = '<li><a href="javascript:showContact(' +
              tmpContactId + ');return false;">'+tmpDisplayName+'</a></li>';
            contactSelectionsVar.append(tmpLiFragment);
          }
        }
      }
    }
    contactSelectionsVar.listview('refresh');
    showList();
  }
这里,通过javascript去调用了showContact方法,用于显示某个人的具体通讯录,代码如下:

function showContact(tmpId){
  showProgress();
  contactSupport.showContact(tmpId,'DetailPage.html');
}

  这里,首先调用了等待图标的显示方法,然后同样调用后端Android Java的showContact方法调出通讯录的详细信息,然后再把结果回调显示到DetailPage.html中

  而后端JAVA对应的showContact方法如下:

public void showContact(String contactId, String displayPage){
  loadPage(displayPage + "?" + contactId);
}

  这里再通过loadPage调用前端的Javscirpt页面,并传入要查看的通讯录的参数contactId,假如现在要看的某人的通讯录的contatId是23,而回显通讯录详细信息的页面是DetailPage.html,则跳转的URL为DetailPage.html?23