2015-10-29 2 views
3

Я пытаюсь создать приложение, я хотел бы переключиться между двумя пользователями Android (Алиса (владелец) и Боб). Когда Алиса является текущим пользователем, я хочу открыть приложение и нажать кнопку и переключиться на учетную запись Боба и наоборот.)Как переключить пользователей в приложение на Android?

Я установил приложение как администратор устройства, используя класс 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

Это в основном приложение, которое делает то же самое, как если бы мы Заходим в настройки Меню> Пользователи.

+0

Похоже, вы хотите сделать это как администратор. Было бы достаточно, чтобы Алиса вышла, чтобы Боб мог войти? Или администратор должен сделать переключатель? –

+0

Каждый пользователь должен иметь возможность сделать коммутатор. Пример: Алиса открывает приложение, нажимает кнопку и переключается на пользовательский боб. Боб также мог открыть приложение и вернуться к Алисе. Я мог бы попробовать ваш подход. Сделайте Алису выйди, чтобы Боб мог войти. Любые идеи о том, как я могу это реализовать. Просто начал изучать Android вчера, и я не очень хорошо знаю API. – Ruma

+0

Какова концепция «учетной записи» для вашего приложения? Нужно ли пользователям проходить проверку подлинности на сервере? У вас есть собственный сервер приложений со счетами/паролями? Или вы используете стороннюю компанию, такую ​​как Facebook или Google? Или пользователям вообще не нужны пароли? Как создавать учетные записи для устройства? Как вы решаете: «Хорошо, Алиса получает учетную запись, а Боб получает учетную запись». Извините за все вопросы, это все, что нужно подумать о создании приложения. Высокий порядок для тех, кто только начинает на Android! Я могу показать вам два пути: жесткий и еще более жесткий путь. –

ответ

0

на данный момент я просто пытаюсь понять, позволяет ли андроид программным образом переключать учетные записи пользователей.

Хорошо, я собираюсь решить эту часть вопроса, так как вы ничего не сказали о удаленном сервере и в какой части он играет.

Ответ: Да, вы можете изменять учетные записи программно. Вы можете хранить данные учетной записи в базе данных SQLite (жесткий) или внутренне используя AccountManager (еще более жесткий путь).

Жесткий путь: Управление данными учетной записи с использованием таблицы SQLite.

Если вам не нужны более сложные функции, такие как удаленная синхронизация данных в фоновом режиме, вы можете сами определить, что означает «учетная запись» для вашего приложения. Нет ничего, что требовало бы от вас использовать функции AccountManager в вашем приложении. Вы можете иметь таблицы SQLite, которые содержат имя пользователя и любые другие данные, которые необходимо связать с этим пользователем. Имейте в виду, что вашему приложению понадобятся некоторые административные функции для ведения таблицы учетных записей, поэтому вам также придется кодировать их.

После того, как у вас есть данные для каждой учетной записи пользователя, вы можете даже активировать список всех пользователей и выбрать тот, с которым хотите войти, если хотите.

The Even Harder Way: Напишите аутентификатор учетной записи, который подключается к AccountManager.

Я сделал это для своего приложения, и это настоящий вызов. Я бы не рекомендовал его для кого-то вроде вас, который только начинается с Android, но вам может понадобиться использовать возможности удаленной синхронизации данных Android.

Я имею в виду все в этой статье, как лучший гид для работы с Android аутентификации: Write your own Android Authenticator

Ваше приложение должно иметь свой собственный тип счета («com.whatever»); вам не нужно использовать учетные записи Google.Наличие настраиваемого аутентификатора также позволяет вам управлять учетными записями из настроек | Учетные записи на устройстве, поэтому вам даже не нужно запускать приложение. Это описано в статье.

AccountManager и друзья также предоставляют встроенное действие для выбора учетной записи из списка учетных записей, уже установленных на устройстве.


Это всего лишь обзор; как говорится, дьявол в деталях. Вы должны решить, какой поток предназначен как для пользователя, так и для вас как администратора, как приложение работает с удаленным сервером (например, с сеансами), и если ваш проект учитывает все риски безопасности (сколько воздействия у меня есть, если на устройстве хранятся пароли?)

+0

Большое вам спасибо за такой подробный ответ. «Еще труднее» пригодится во второй фазе моего проекта. Одна вещь, которую я до сих пор не получаю, - это то, как я получаю детали для второго пользователя. Например, если Алиса вошла в систему, я не могу видеть детали (учетную запись) Боба. (Я тестировал с примерами, приведенными в вашей ссылке). Но на данный момент я собираюсь оставить проверку подлинности позже. Я собираюсь попытаться реализовать «Жесткий путь», потому что сейчас мне кажется, что мне больше нужно. – Ruma

+0

Должна ли быть учетная запись Google? Может ли ваше приложение иметь собственный тип учетной записи? Если ваше приложение имеет свой собственный тип учетной записи, вы можете настроить его таким образом, чтобы Алиса могла войти в ваше приложение, но вы все еще можете видеть данные учетной записи Боба. –

+1

Я полагаю, что вопрос первоначально касался пользователей Android (которые обычно обрабатываются через UserManager), и этот ответ касается учетных записей, что является другой концепцией. – shalafi

Смежные вопросы