仅在系统用户(用户 0)上运行 Android Automotive 应用程序

问题描述 投票:0回答:1

我正在构建一个不包含任何 UI 的 Android Automotive system 应用程序。

此服务充当设备上的本地后端/代理,等待来自其他应用程序的请求,执行所需的操作并返回所需的数据作为响应。

服务和其他应用程序之间的大部分交互都是使用 AIDL 处理的。

两个问题:

  1. 因为我们的系统支持多个用户,所以创建了两个进程,每个用户一个 - 系统用户(user#0)和普通用户(user#12)。有没有办法通知系统只为系统用户创建进程?我尝试将接收器标记为
    singleUser=true
    ,但没有帮助,仍然为每个用户创建两个进程。
  2. 我使用的另一种方法是在启动完成的接收器上识别当前正在运行的用户,以防普通用户使用
    PackageManager.setApplicationEnabledSetting()
    禁用该应用程序,就像 Google 建议的 here 一样。问题是,当其他应用程序尝试使用 AIDL 服务进行通信时,我收到以下错误。值得一提的是,每项服务都标有
    android:exported="true"
    android:singleUser="true"
    。据我所知,将服务标记为
    singleUser=true
    应该使所有调用都路由 到系统用户上运行的服务。 我在当前的实施中遗漏了什么吗?

ActivityManager:无法启动服务意图{ act=com.companyName.appName.services.serviceName pkg=com.companyName.appName } U=12:未找到

android service aidl multi-user android-automotive
1个回答
0
投票

可以用

Context.bindServiceAsUser()
绑定。您需要
android.permission.INTERACT_ACROSS_USERS
并且两个包必须具有相同的签名。请参阅文档:
Building Multiuser-Aware Apps

© www.soinside.com 2019 - 2024. All rights reserved.