调用系统中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中找到解决办法,代码就在那里,看你如何去发现。


以上。




  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Python 的 Flask 框架来创建一个简单的网页系统登陆界面。以下是一个简单的示例代码: ```python from flask import Flask, render_template, request, redirect, url_for app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] if username == 'admin' and password == 'password': return redirect(url_for('dashboard')) else: error = 'Invalid Credentials. Please try again.' return render_template('login.html', error=error) return render_template('login.html') @app.route('/dashboard') def dashboard(): return 'Welcome to the Dashboard!' if __name__ == '__main__': app.run(debug=True) ``` 在上面的代码,我们创建了一个 Flask 应用程序,并定义了两个路由。第一个路由是用于登陆的页面,它支持 GET 和 POST 请求。当用户提交表单时,我们从表单获取用户名和密码,并检查它们是否正确。如果验证通过,我们将用户重定向到仪表板页面。否则,我们将显示一个错误消息。 第二个路由是仪表板页面,它只是简单地显示一个欢迎消息。在本例,我们只是在控制台输出了消息,但你可以轻松地将其转换为一个 HTML 模板。 最后,我们可以使用 `app.run()` 方法来启动服务器。在本例,我们设置了 `debug=True`,以便在开发过程获取更多有用的调试信息。 你还需要创建一个 HTML 模板来显示登陆表单。以下是一个简单的示例代码: ```html <!doctype html> <html> <head> <title>Login Page</title> </head> <body> <h1>Login to Your Account</h1> {% if error %} <p>{{ error }}</p> {% endif %} <form method="post"> <label>Username:</label> <input type="text" name="username"><br> <label>Password:</label> <input type="password" name="password"><br> <input type="submit" value="Login"> </form> </body> </html> ``` 在上面的代码,我们创建了一个简单的表单,其包含两个输入字段(用户名和密码)和一个提交按钮。当表单被提交时,它将发送一个 POST 请求,我们将在 Python 代码处理它。 你可以根据自己的需要对此 HTML 模板进行修改和自定义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值