调用系统中Account类型的登录界面

我们的手机中的Seting里面可以添加很多类型的帐户,有时候,我们需要在程序中启动这些帐户的登录界面,但是,就算你知道了登录界面的包名、类名,通过Intent也没办法启动,这是因为Android的权限控制。

不过,我们在Framework中也找到了解决的办法,比如我们要启动Google Account的登录界面,我们只需要知道该帐户的类型就可以了,像Google就是com.google:

下面我们来看看如何启动这样一个界面:

private void setupAccount(String type) {
        Bundle addAccountOptions = new Bundle();
        mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(), 0);
        addAccountOptions.putParcelable(KEY_CALLER_IDENTITY, mPendingIntent);
        addAccountOptions.putBoolean(EXTRA_HAS_MULTIPLE_USERS,
                hasMultipleUsers(this));
        AccountManager.get(this).addAccount(
                type,
                null, /* authTokenType */
                null, /* requiredFeatures */
                addAccountOptions,
                null,
                mCallback,
                null /* handler */);
    }

    public boolean hasMultipleUsers(Context context) {
        return ((UserManager) context.getSystemService(Context.USER_SERVICE))
                .getUsers().size() > 1;
    }

    /**
     * Callback setting google account.
     */
    private AccountManagerCallback<Bundle> mCallback = new
            AccountManagerCallback<Bundle>() {
                @Override
                public void run(AccountManagerFuture<Bundle> future) {
                    try {
                        Bundle bundle = future.getResult();

                        Intent intent = (Intent) bundle.get(AccountManager.KEY_INTENT);
                        if (intent != null) {
                            Bundle addAccountOptions = new Bundle();
                            addAccountOptions.putParcelable(KEY_CALLER_IDENTITY, mPendingIntent);
                            addAccountOptions.putBoolean(EXTRA_HAS_MULTIPLE_USERS,
                                    hasMultipleUsers(KSWarning.this));
                            intent.putExtras(addAccountOptions);
                            startActivityForResult(intent, 0);
                        }
                    } catch (OperationCanceledException e) {
                    } catch (IOException e) {
                    } catch (AuthenticatorException e) {
                    }
                }
            };

我们通过调用setupAccount()将帐户类型传递进去就可以了。

这些代码都是Framework中的代码,我们稍微修改了下就拿来用了。所以说,Framework是个宝藏,很多功能都可以在Framework中找到解决办法,代码就在那里,看你如何去发现。

以上。

时间: 2024-08-13 13:02:49

调用系统中Account类型的登录界面的相关文章

CentOS 6.6 系统中文件类型,属性与权限

一.系统中的文件类型. 类型: ①'d'代表目录文件, dr-xr-xr-x.  5 root root  1024 2月  27 00:15 boot 'dr-xr-xr-x.'中的'd',就是表示这个文件为目录文件. ②'-'代表普通文件, -rwxr-xr-x. 1 root root   23408 10月 15 12:45 arch '-rwxr-xr-x.'中的'-',就是表示这个文件为普通文件. ③'b'代表块设备文件, brw-rw----. 1 root disk      7

Intent 调用系统中经常用到的组件

1,web浏览器 Uri uri= Uri.parse("http://kuikui.javaeye.com"); returnIt = new Intent(Intent.ACTION_VIEW, uri); 2,地图 Uri mapUri = Uri.parse("geo:38.899533,-77.036476"); returnIt = new Intent(Intent.ACTION_VIEW, mapUri); 3,调拨打电话界面 Uri telUri

调用webservices中 枚举类型没有被序列化问题

引用服务后,代理类为自动为所有枚举类型生成了一个Bool类型相关字段,命名方式:比如枚举类名为“PayType”,生成的相关字段为“PayTypeSpecified”,此字段有何作用? PayTypeSpecified字段默认值为false,请求webservices的时候是不会序列化“PayType”这个字段的,当设定“PayTypeSpecified”为True的时候,就会被序列化了.

系统中个别页面间断性跳转到登录页异常

一.问题描述 系统名称:公司内客户关系管理(crm)系统 系统架构:前端为一台nginx服务器作为负载均衡器,后端为两台tomcat服务器提供web服务,nginx服务器分发请求对ip地址做hash,保证同一ip的请求被分发到相同的机器,所以不需要做session共享. 问题出现:公司内系统运行一直正常,某一天,系统中商家管理页面出现请求处理还未完毕就跳到登录页的情况,问题可复现,其它页面请求正常. 二.分析过程 这类问题比较好解决,因为系统中其它页面请求正常,这为排查问题提供了很大的帮助. 页

IOS中调用系统拨打电话发送短信

一.调用打电话界面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",_phoneNumber]]]; 二.发送短消息界面 调用系统的发送短信的界面,需要引入以下头文件: #import <MessageUI/MessageUI.h> 系统短信界面的调用很简单,只需下面几句代码: ? 1 2 3 4 5         

ExtJS4.2学习(22)登录界面

现在开始我们来慢慢完善这个系统,今天做一个登录界面,此套系统已经开始慢慢加入Java各种框架,或者后期我会自己定义合适的框架,让它可以完整的跑下来. 今天做的是用window包裹panel,panel再包裹tabpanel实现的:先来看看今天做的效果图: login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"

Ubuntu 14.04解决登录界面无限循环的方法

在Ubuntu下配置Android的环境时,想像在Windows中那样在终端中直接启动adb,以为Linux和Windows一样,将adb的路径添加到环境变量中,于是将adb的路径也export到/etc/profile中,可杯具了,重启系统后,无限循环登录界面,经多方查找资料找到了解决办法. 办法如下: 1. 进入了登录界面后,不用输入密码,按住Ctrl+Alt+F1(听说F1-F6都行) 2. 进入了ubuntu的命令行界面,先输入用户名回车,然后输入密码回车(纯新手,不懂,习惯的直接密码了

Linux 上 GDM 登录界面如何适应高分屏

导读 GDM(GNOME Desktop Manager)是一种 GNOME 显示环境的管理器,它是一个运行在后台的小程序(脚本),用于运行你的 X 会话,显示一个登录界面并在你正确输入密码后才允许登录.GDM 在各个方面胜出 xdm,也没有 xdm 那么多的漏洞. GDM(GNOME Desktop Manager)是一种 GNOME 显示环境的管理器,它是一个运行在后台的小程序(脚本),用于运行你的 X 会话,显示一个登录界面并在你正确输入密码后才允许登录.GDM 在各个方面胜出 xdm,也

linux系统中安装虚拟机

在linux系统中,利用图形化界面安装虚拟机.首先启动 virt-manager,当然没有安装 virt-manager需要先安装好. 1 $ apt-get install virt-manager 2 $ virt-manager I. 准备工作. 1. 在linux系统上安装虚拟机环境KVM 1 $ apt-get install kvm qemu-kvm libvirt-bin virtinst bridge-utils virt-viewer 2 $ adduser root libv