如何在Android中的应用内切换用户?

时间:2015-10-29 00:19:18

标签: java android

我想尝试构建应用程序,我想在两个Android用户(Alice(所有者)和Bob)之间切换。当Alice是当前用户时,我想打开应用程序并按下按钮并切换到Bob的帐户,反之亦然。)

我使用DevicePolicyManager课程将应用设置为设备管理员,因此我可以使用switchUser方法,但我不明白我如何设置userHandler所以我可以切换用户。

public class DevicePolicyAdmin extends Activity {
    protected static final int REQUEST_ENABLE = 1;
    DevicePolicyManager appDevicePolicyManager;
    ComponentName appDevicePolicyAdmin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_device_policy_admin);
        appDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        appDevicePolicyAdmin = new ComponentName(this,
                MyDevicePolicyReceiver.class);
        Intent intent = new Intent(
                DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(
                DevicePolicyManager.EXTRA_DEVICE_ADMIN,
                appDevicePolicyAdmin);
        intent.putExtra(
                DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                getString(R.string.admin_explanation));
        startActivityForResult(intent, REQUEST_ENABLE);
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        appDevicePolicyManager.switchUser(appDevicePolicyAdmin, android.os.Process.myUserHandle());
    }
}

我尝试的另一种方法是使用AccountManager类,但我只能通过用户电子邮件获取电流。这个类似乎没有switchUser方法。

AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
Account[] list = manager.getAccountsByType("com.google");

StringBuilder builder = new StringBuilder();

for (Account s : list)
{
    builder.append(s + " ");
}
setContentView(R.layout.activity_device_policy_admin);
TextView txt = (TextView) findViewById(R.id.textView);
txt.setText(builder.toString());

这是我想要实施的图片。

switch users android

它基本上是一个应用程序,它做同样的事情,就像我们去设置菜单>用户。

1 个答案:

答案 0 :(得分:0)

  

现在我只想了解android是否允许我以编程方式切换用户帐户。

好的,我只想解决问题的这一部分,因为你还没有说过任何关于远程服务器及其播放的部分。

答案是:是的,您可以通过编程方式更改帐户。您可以使用AccountManager(更难的方式)将帐户数据存储在SQLite数据库中(困难的方式)或内部存储。

艰难的方式:使用SQLite表管理帐户数据。

如果您不需要在后台使用远程数据同步等更复杂的功能,您可以自己定义“帐户”对您的应用的含义。没有什么要求您在应用中使用AccountManager功能。您可以拥有包含用户名的SQLite表以及与该用户关联所需的任何其他数据。请注意,您的应用需要一些管理功能来维护帐户表,因此您还必须对其进行编码。

如果您拥有每个用户帐户的数据,您甚至可以列出所有用户的活动,并根据需要选择要登录的用户。

更难的方式:编写一个插入AccountManager的帐户身份验证器。

我为我的应用做了这个,这是一个真正的挑战。我不会推荐给像你这样刚开始使用Android的人,但如果你想使用Android的远程数据同步功能,你可能需要这样做。

我将每篇人都称为使用Android身份验证的最佳指南:Write your own Android Authenticator

您的应用应该有自己的帐户类型(“com.whatever”);您不必使用Google帐户。拥有自定义身份验证器还可以让您通过“设置”管理帐户设备上的帐户,因此您甚至不必运行您的应用程序。这在文章中有所描述。

AccountManager和朋友还提供了一个内置活动,可以从设备上已有的帐户列表中选择一个帐户。

这只是一个概述;正如他们所说,魔鬼在于细节。您必须确定用户和管理员的流程,以及与远程服务器一起使用的应用程序(例如,使用会话),以及您的设计是否解决了所有安全风险(曝光量)如果密码存储在设备上,我该怎么办?)