【问题标题】:Want to know startForeground() as user for multiuser想知道 startForeground() 作为多用户的用户
【发布时间】:2015-01-19 14:01:27
【问题描述】:

我正在开发 android 多用户。所以我必须将我现有的项目转换为多用户支持项目。

我的应用程序将在所有者中运行。如果我切换到用户,任何相关的 UI 操作都应该显示在所有者或用户上, 我正在使用 Context.startActivityAsUser(intent, UserHandle.Current); 因此该活动将在相应的用户或所有者上启动。 启动广播事件的方式相同。

在我的应用程序中,我使用通知作为服务的一部分,如下所示 startForeground(int id, Notification 通知);

由于服务正在运行,因此通知仅显示在所有者上,即使我切换到用户也是如此。 当最终用户切换到其他配置文件时,通知应显示在当前配置文件上。

据我所知,没有 startForeground(...) 作为用户(我的意思是 startForegroundAsUser()),所以我已将通知内容转换为 NotificationManager.notifyAsUser(null, appID, notification, UserHandle.CURRENT); …… 当我从所有者切换到用户时,我的应用程序崩溃并且日志也不清楚以查找问题。 Logcat 只是说 I/ActivityManager(421): 进程 com.example.test (pid 5833) 已经死亡 W/ActivityManager(421):计划在 1000 毫秒内重新启动崩溃的服务 com.example.test/com.example.test.testservice ...... ...... .....

但服务未启动,因为顶级配置文件是 CURRENT。

让我知道实现此目的的另一种方法。

【问题讨论】:

    标签: android android-notifications multi-user


    【解决方案1】:

    简短的回答是你不能这样做。每个应用程序包都安装在设备上,并为每个人类用户提供一个单独的数据区域和进程。它们通过 Linux UID/GID 和权限被故意隔离在内存和文件系统空间中。在 Android 5.0 中,使用 SE Linux for Android 进一步强制执行此操作。因此,当您切换(人类)用户时,您的应用将作为该人的单独实例启动。

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      相关资源
      最近更新 更多