android.accounts主要包括了集中式的帐户管理API,

AccountManagerCallback,

AccountManagerFuture,

OnAccountsUpdateListener,

AbstractAccountAuthenticator,

Account,

AccountAuthenticatorActivity,

AccountAuthenticatorResponse,

AccountManager,

AuthenticatorDescription,

示例学习:添加多个帐户来集中管理

1. 在AndroidManifest.xml文件中授权,以及确定API lever为5,

<uses-sdk android:minSdkVersion=”5” />

<uses-permission android:name=”android.permission.MANAGE_ACCOUNTS/>

<uses-permission android:name=”android.permission.ACCOUNT_MANAGER/>

<uses-permission android:name=”android.permission.GET_ACCOUNTS/>

<uses-permission android:name=”android.permission.AUTHENTICATE_ACCOUNTS/>

2. 在Activity中,得到AccountManager对象

AccountManager accountManager = AccountManager.get(this);

AccountManager中的常用方法

addAccount,

addOnAccountsUpdatedListener,

removeOnAccountsUpdatedListener,

clearPassword,

getAccounts,

getAccountsByType,

getPassword,

getUserData,

setPassword,

removeAccount,

将指定类型的帐户信息全部列出来

Account[] accounts = accountManager.getAccountsByType(xxx);

for(Account account : accounts) {

  String name = account.name;

  String type = account.type;

}

如何将帐户信息添加到帐户管理器中

Activity self = this;

String server, username, password, type;

Account account = new Account(name, type);

Bundle userdata = new Bundle();

userdata.putString(“server”, server);

AccountManager am = AccountManager.get(self);

// 向帐户管理器中添加一个帐户

if(am.addAccountExplicitly(account, password, userdata)) {

  Bundle result = new Bundle();

  result.putString(AccountManager.KEY_ACCOUNT_NAME, username);

  result.putString(AccountManager.KEY_ACCOUNT_TYPE, type);

  setAccountAuthenticatorResult(result);

}

// 添加一个帐户服务(Service)和一个验证器(AbstractAccountAuthenticator)

1. 构建res/xml/authenticator.xml

<?xml version=”1.0” encoding=”utf-8”?>

<account-authenticator xmlns:android=”http://schemas.android.com/apk/res/android”

  android:accountType=”com.txrj.AccountType”

  android:icon=”@drawable/icon”

  android:smallIcon=”@drawable/icon”

  android:label=”@string/account_label”

  android:accountPreferences=”@xml/account_preferences”

/>

2. 在AndroidManifest.xml文件中开启一个帐户管理服务

<service android:name=”SleepyAccountsService”>

  <intent-filter>

    <action android:name=”android.accounts.AccountAuthenticator” />

  </intent-filter>

  <meta-data android:name=”android.accounts.AccountAuthenticator”

    android:resource=”@xml/authenticator” />

</service>

3. 实现帐户服务类SleepyAccountsService

public class SleepyAccountsService extends Service {

  private SleepyAccountAuthenticator authenticator;

  public Ibinder onBind(Intent intent) {

    if(intent.getAction().equals(android.accounts.AccountManager.ACTION_AUTHENTICATOR_INTENT)) {

      return getSleepyAuthenticator().getIBinder();

    return null;

  }

  private SleepyAccountAuthenticator getSleepyAuthenticator() {

    if(authenticator == null)

      authenticator = new SleepyAccountAuthenticator(this);

    return authenticator;

  } 

  }

}

4. 在添加、操作帐户时会通过AbstractAccountAuthenticator实现异步调用。

public Bundle addAccount(AccountAuthenticatorResponse response, String accountType,

    String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException

{

    Bundle bundle = new Bundle();

    Intent intent = new Intent(context, SleepyAccountAuthenticatorActivity.class);;

    intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);

    bundle.putParcelable(AccountManager.KEY_INTENT, intent);

    return bundle;

}

Android开发之帐户管理的更多相关文章

  1. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  2. Android 开发一定要看的15个实战项目

    前言: 虽说网上有太多的Android课程,但是大多都是视频,有Android在线开发环境的几乎没有,但是对于学习Android的人来说拥有在线的Android开发环境是非常好的,可以随时动手操作学习 ...

  3. Android开发学习之路-关于Exception

    Exception在Java中是表示异常的一个类.它是Throwable的子类. 而Exception的子类RuntimeException是一个特殊的异常类,在代码中不需要对此类进行throw,而是 ...

  4. Android开发学习之路-Android中使用RxJava

    RxJava的核心内容很简单,就是进行异步操作.类似于Handler和AsyncTask的功能,但是在代码结构上不同. RxJava使用了观察者模式和建造者模式中的链式调用(类似于C#的LINQ). ...

  5. Android开发学习之路-记一次CSDN公开课

    今天的CSDN公开课Android事件处理重难点快速掌握中老师讲到一个概念我觉得不正确. 原话是这样的:点击事件可以通过事件监听和回调两种方法实现. 我一听到之后我的表情是这样的: 这跟我学的看的都不 ...

  6. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  7. Android开发-之监听button点击事件

    一.实现button点击事件的方法 实现button点击事件的监听方法有很多种,这里总结了常用的四种方法: 1.匿名内部类 2.外部类(独立类) 3.实现OnClickListener接口 4.添加X ...

  8. Android 开发环境在 Windows7 下的部署安装

    Android SDK Android SDK 为 Android 应用的开发.测试和调试提了必要的API库和开发工具. ADT Bundle 下载 如果你是一个android 开发新手,推荐你下载使 ...

  9. Android开发之自定义的ListView(UITableViewController)

    Android开发中的ListView, 顾名方法思义,就是表视图.表示图在iOS开发中就是TableView.两者虽然名称不一样,但是其使用方法,使用场景以及该控件的功能都极为相似,都是用来展示大量 ...

随机推荐

  1. Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) A. Little Artem and Presents 水题

    A. Little Artem and Presents 题目连接: http://www.codeforces.com/contest/669/problem/A Description Littl ...

  2. CodeM资格赛5

    早上起床太晚,最后没时间了.. 不是ac代码,下次题目在oj上线的时候再去做一下.. #include<iostream> #include<cstdio> #include& ...

  3. javascritp 字符串截取

    1.substring 方法 定义和用法 substring 方法用于提取字符串中介于两个指定下标之间的字符. 语法 ? stringObject.substring(start,stop) 参数   ...

  4. java类中元素初始化顺序详解

    父类静态变量父类静态块子类静态变量子类静态块父类普通变量父类普通块父类构造方法子类普通变量子类普通块子类构造方法

  5. Jetty开发指导:WebSocket介绍

    WebSocket是一个新的基于HTTP的双向通讯的协议. 它是基于低级别的框架协议.使用UTF-8 TEXT或者BINARY格式传递信息. 在WebSocket中的单个信息能够是不论什么长度(然而底 ...

  6. PHP 函数之 call_user_func &amp; call_user_func_array

    call_user_func_array (callable $callback, array $param_arr) 參数1: 调用一个回调函数, 參数2: 数组參数是回调函数的參数. call_u ...

  7. .NET Transactional File Manager

    .NET Transactional File Manager http://transactionalfilemgr.codeplex.com/ 对文件系统操作,比如copy, move, dele ...

  8. BusyBox 简化嵌入式 Linux 系统

    BusyBox 是很多标准 Linux® 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大.更复杂的工具,例如 grep.find.moun ...

  9. python使用游标访问数据

    游标是一种数据访问对象,可用于在表中迭代一组行或者向表中插入新行.游标有三种形式:搜索.插入或更新.游标通常用于读取现有几何和写入新几何. 每种类型的游标均由对应的 ArcPy 函数(SearchCu ...

  10. 设计原则:小议 SPI 和 API

    背景 第一次听说 SPI 是阅读<软件框架设计的艺术>,以后陆续在 Log4Net 和 Quartz.Net中发现了以这种形式组织代码的方式,本位给出为什么要区分 SPI 和 API 的一 ...