`
杨梦隶
  • 浏览: 2768 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 多用户

阅读更多

    在Android 4.2中加入了多用户的支持,但是只在平板端适用,主要是因为在使用Android平板的时候,像邮件、即时聊天这些信息会被平板所接收,这没什么问题,切换了用户也就切换了这些网络工具的账号,推送是到达正确的方面。而手机则不同,手机上会接收到来电、私人短信,并且不管现在登录的账号是哪个,现在这个问题google也没有一个明确的解决方向。

    多用户并不是什么新概念,类似windows,linux等桌面操作系统都有这样的功能,但是android多用户还是有自己的一些特性,首先,第一个使用平板的用户默认为平板管理员,可以在平板设置选项的用户区添加或删除帐号。网络设置和安装应用程序的权限在平板所有用户中通用和共享,但墙纸、主屏幕、锁屏布局、PIN码、屏幕明亮度、单个应用设置等则各不相同。跟Windows操作系统的不同之处在于,4.2系统的其他用户帐户中正在运行的后台程序也会占用一定的RAM空间。而最明显的区别是用户之间的应用程序无法共享,这样一来想要用没付费的帐户在同一台机器下载其他账户已经付费的内容时,需要在商店用已付费的帐户密码重新登录,如果想要保护隐私的话就没办法跟其他用户共享付费软件。(多个账户重复下载同一应用时不会在存储空间里出现相同的两个应用,而是进行虚拟下载和安装,不用担心占用空间。)用户之间不能直接共享数据,即使将平板和电脑相连,也只能浏览当前用户的文件,切换帐号需要重新装载,虽说有些麻烦但是安全性得到了充分保证。

    多用户的支持判断:系统判断当前设备是否支持多用户模式的依据是配置文件config.xml中的config_multiuserMaximumUsers配置项。 其取值为整型,决定着当前设备支持的最大用户上限。默认值为1,即不支持多用户。代码的判断在UserManager.java:

    /**
     * Returns the maximum number of users that can be created on this device. A return value
     * of 1 means that it is a single user device.
     * @hide
     * @return a value greater than or equal to 1
     */
    public static int getMaxSupportedUsers() {
        // Don't allow multiple users on certain builds
        if (android.os.Build.ID.startsWith("JVP")) return 1;
        return SystemProperties.getInt("fw.max_users",
                Resources.getSystem().getInteger(R.integer.config_multiuserMaximumUsers));
    }

     多用户的相关操作:对用户的操作目前未对普通应用开放,其相关API都有hide注解,并需要system权限。此外,用户的添加和移除还要需添加android.Manifest.permission.MANAGE_USERS权限。

<!-- @hide Allows an application to call APIs that allow it to query and manage
         users on the device. This permission is not available to
         third party applications. -->
    <permission android:name="android.permission.MANAGE_USERS"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="signature|system"
        android:label="@string/permlab_manageUsers"
        android:description="@string/permdesc_manageUsers" />

    添加用户:用户添加是通过调用UserManager(系统服务)的public UserInfo createUser(String name, int flags)方法进行的。其具体实现在UserManagerService的同名方法中。

    保存用户:用户创建后,会首先在/data/system/users/userlist.xml文件中保存新增加用户的id,创建/data/system/users/ 用户id 目录,并将用户信息保存至其下的用户id.xml 文件中。其内容包括一些基本的用户信息。

    用户切换:用户切换是通过调用ActivityManager的public boolean switchUser(int userId)方法进行。

    用户移除:用户移除是通过调用UserManager的 public boolean removeUser(int userHandle) 方法进行的。

    ActivityManagerService目前加入了多用户支持。负责维护设备中存在的所有用户状态。服务以下述变量来记录当 前处于“启动”状态的用户。

/** 
     * Which uses have been started, so are allowed to run code. 
     */  
    final SparseArray mStartedUsers = new SparseArray();  
   
    /** 
     * LRU list of history of current users.  Most recently current is at the end. 
     */  
    final ArrayList mUserLru = new ArrayList();  
   
    /** 
     * Constant array of the users that are currently started. 
     */  
    int[] mStartedUserArray = new int[] { 0 }; 

 

用户的启动状态对象为com.android.server.am.UserStartedState。其中指定的用户状态有四种:

  • public final static int STATE_BOOTING = 0; //用户启动
  • public final static int STATE_RUNNING = 1; //运行中
  • public final static int STATE_STOPPING = 2; //停止中
  • public final static int STATE_SHUTDOWN = 3; //用户关闭状态

完整的用户生命周期为:
BOOTING->RUNNING->STOPPING->SHUTDOWN

未完待续!

 

0
0
分享到:
评论

相关推荐

    Android多用户实现和原理

    ### Android多用户实现和原理 #### 一、简介 Android多用户功能允许一台设备上同时存在多个用户账户,每个用户可以拥有独立的应用程序环境、数据和设置。这为家庭成员共享设备提供了极大的便利性,同时也适用于...

    Android13 去除设置中的多用虎和锁屏中的多用户.patch

    Android13 去除设置中的多用虎和锁屏中的多用户.patch

    android 用户登录界面

    总之,设计和实现一个"很绚丽的Android界面"涉及多方面的技术和考虑,包括界面设计、用户体验、安全性、跨平台开发以及合规性。在`MyFirstPhoneGapApp`中,我们可以学习到如何利用PhoneGap这样的工具,结合HTML5和...

    Android 用户登录界面

    总的来说,构建一个Android用户登录界面涉及到UI设计、布局管理、输入验证、服务器交互等多个方面。"LoginLayout"文件中的代码提供了实践这些概念的实际示例,帮助开发者更好地理解和实现这个功能。

    android 多选框

    在Android开发中,多选框(CheckBox)是一个常见的UI组件,用于让用户选择多个选项中的一个或多个。在设计用户界面时,多选框是提供多选项选择的重要元素。本教程将深入探讨如何在Android中自定义多选框,并提供两个...

    android多张图片展示

    综上所述,实现“android多张图片展示”涉及多个方面,包括图片选择接口、拍照、图片预览、裁剪、删除、权限管理、UI设计、数据持久化以及性能优化等。通过熟练掌握这些知识点,开发者能够构建出类似微信朋友圈的...

    Android用户界面设计

    资源名称:Android用户界面设计内容简介:《Android用户界面设计》回顾了Android 系统简史和最新Jelly Bean 版本的特征,鼓励开发人员开发更多的Android 应用;在细致介绍完开发基础之后,以房地产应用为例,演示...

    android 超级用户 root 管理工具

    android 开发过程中程序很多时候免不了需要对系统目录下的内容进行操作,虽然android的内核是linux系统,但是在linux中却换到root下的方式是sudo root的方式,但是在的android中并没有提供我们su。 So我们要向需要...

    android 多方向抽屉

    描述中的"android多方向抽屉drawer,上下左右均可"表明我们将关注如何实现一个可以沿着屏幕四个边界的抽屉。在Android中,虽然官方的`android.widget.SlidingDrawer`类已经被废弃,但开发者仍然可以通过自定义视图...

    Android-21 Android SDK platforms 21(Android5.0)

    4. **多用户支持**:Android 5.0扩展了多用户功能,允许在同一设备上创建多个用户空间,每个用户都有自己独立的桌面、应用和数据,这对于家庭和企业环境尤为实用。 5. **通知栏改进**:通知栏进行了重新设计,支持...

    Android TextView查看更多

    在特定场景下,为了优化用户体验,我们可能希望只显示文本的一部分,如果文本内容超出了预设的显示范围,就用"点击查看更多"这样的提示语来引导用户查看全部内容。这种交互方式常见于新闻摘要、评论详情等场景。本篇...

    android的sdk下载 android-21

    多用户支持在Android 5.0中得到扩展,允许设备支持多个用户账户,每个账户都有自己的独立空间和个性化设置,这对于共享设备或者企业环境尤其有用。 在电池管理方面,Android 5.0引入了Project Volta,包含Battery ...

    android多线程多任务断点续传

    一、Android多线程 在Android系统中,主线程(UI线程)负责处理用户界面的更新和事件响应。如果长时间执行耗时操作,如网络请求或大数据处理,主线程会被阻塞,导致用户界面无响应,这就是著名的"ANR"(Application...

    android 视频多屏互动

    在Android平台上实现视频多屏互动是一项复杂而富有挑战性的任务,它涉及到多个技术领域,包括多媒体处理、网络通信、设备适配以及用户界面设计。在这个过程中,开发者需要确保视频流能在不同的屏幕之间流畅地传输和...

    Android多语言的demo

    这个"Android多语言的demo"项目就是一个很好的起点,它展示了如何让应用程序能够显示英语、汉语和其它语言的"Hello, World!",以此来演示Android应用的国际化和本地化机制。 首先,我们要了解Android的国际化...

    Android vold 多U盘多分区挂载实现

    总之,实现Android vold的多U盘多分区挂载是一项涉及系统服务、驱动程序、配置文件和用户界面等多个层面的任务。通过对`vold`服务的定制和扩展,我们可以让Android设备更加灵活地处理各种存储设备,满足多样化的存储...

    android 连接多个usb camera的demo

    在Android平台上,连接和操作多个USB摄像头是一项技术挑战,但也是许多高级应用,如监控、多视图视频会议等的必备功能。这个"android 连接多个usb camera的demo"项目提供了一个解决方案,允许开发者在Android设备上...

    android 拍照或从本地相册多次添加多张图片

    在Android应用开发中,用户经常需要进行拍照或者从本地相册选择图片来进行各种操作,比如上传、编辑等。本文将详细讲解如何实现“android 拍照或从本地相册多次添加多张图片”的功能,这涉及到Android的多媒体访问、...

    android 双屏多显, 副屏实现播放功能

    首先,了解Android多显示器支持的基础。从Android 7.0(API级别24)开始,Android引入了`DisplayManager`类,它是处理和控制多个显示屏的核心接口。通过`DisplayManager.getDisplays()`方法,我们可以获取到所有连接...

    Android小项目集合100多个

    "Android小项目集合100多个"这个资源包提供了一系列的学习和实践材料,旨在帮助开发者深入理解和掌握Android应用程序的开发技巧。以下将针对Android开发的一些核心知识点进行详细阐述。 1. **Android SDK**:...

Global site tag (gtag.js) - Google Analytics