我正在研究android多用户。所以我必须将我现有的项目转换为多用户支持项目。
我的应用将在所有者中运行。如果我切换到用户,则应在所有者或用户上显示任何相关的UI操作, 我正在使用Context.startActivityAsUser(intent,UserHandle.Current); 因此,活动将在相应的用户或所有者上启动。 与发布广播事件的方式相同。
在我的应用中,我使用通知作为服务的一部分,如下所示 startForeground(int id,Notification notification);
因为服务正在运行所有者,即使我切换到用户,通知也只显示在所有者身上。 当最终用户切换到其他配置文件时,通知应显示在当前配置文件中。
据我所知,没有startForeground(...)作为用户(我的意思是startForegroundAsUser())所以我已经将通知内容转换为 NotificationManager.notifyAsUser(null,appID,notification,UserHandle.CURRENT); .... 当我从所有者切换到用户时,我的应用程序正在崩溃,并且日志也不清楚以找到问题。 Logcat只是说 I / ActivityManager(421):进程com.example.test(pid 5833)已经死亡 W / ActivityManager(421):在1000ms内调度崩溃服务com.example.test / com.example.test.testservice的重启 ..... ..... .....
但是服务未启动,因为顶级配置文件是CURRENT。
让我知道实现这一目标的另一种方法。
答案 0 :(得分:0)
简短的回答是你不能这样做。每个应用程序包都安装在设备上,每个人类用户都有一个单独的数据区和进程。它们通过Linux UID / GID和权限故意隔离在内存和文件系统空间中。在Android 5.0中,这是使用SE Linux for Android进一步强制执行的。因此,当您切换(人类)用户时,您的应用程序将作为该人的单独实例启动。