我想尝试构建应用程序,我想在两个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());
这是我想要实施的图片。
它基本上是一个应用程序,它做同样的事情,就像我们去设置菜单>用户。
答案 0 :(得分:0)
现在我只想了解android是否允许我以编程方式切换用户帐户。
好的,我只想解决问题的这一部分,因为你还没有说过任何关于远程服务器及其播放的部分。
答案是:是的,您可以通过编程方式更改帐户。您可以使用AccountManager
(更难的方式)将帐户数据存储在SQLite数据库中(困难的方式)或内部存储。
艰难的方式:使用SQLite表管理帐户数据。
如果您不需要在后台使用远程数据同步等更复杂的功能,您可以自己定义“帐户”对您的应用的含义。没有什么要求您在应用中使用AccountManager
功能。您可以拥有包含用户名的SQLite表以及与该用户关联所需的任何其他数据。请注意,您的应用需要一些管理功能来维护帐户表,因此您还必须对其进行编码。
如果您拥有每个用户帐户的数据,您甚至可以列出所有用户的活动,并根据需要选择要登录的用户。
更难的方式:编写一个插入AccountManager
的帐户身份验证器。
我为我的应用做了这个,这是一个真正的挑战。我不会推荐给像你这样刚开始使用Android的人,但如果你想使用Android的远程数据同步功能,你可能需要这样做。
我将每篇人都称为使用Android身份验证的最佳指南:Write your own Android Authenticator
您的应用应该有自己的帐户类型(“com.whatever”);您不必使用Google帐户。拥有自定义身份验证器还可以让您通过“设置”管理帐户设备上的帐户,因此您甚至不必运行您的应用程序。这在文章中有所描述。
AccountManager
和朋友还提供了一个内置活动,可以从设备上已有的帐户列表中选择一个帐户。
这只是一个概述;正如他们所说,魔鬼在于细节。您必须确定用户和管理员的流程,以及与远程服务器一起使用的应用程序(例如,使用会话),以及您的设计是否解决了所有安全风险(曝光量)如果密码存储在设备上,我该怎么办?)