Android汽车服务篇(六) CarPackageManagerService

一. 简介

        CarPackageManagerService主要用于车上使用场景扩充了一些包管理相关的接口. 包括黑白名单的机制. 这主要是出于安全的考虑, 车上的应用有更严格的限制.  结合用户体验限制对运行在AAOS上的应用有一个更好的约束.

        

二. 相关用法

        CarPackageManagerService对应的CarPackageManager中的API不多, 加起来7个, 主要来看这两个方法:

 @SystemApi
    public void setAppBlockingPolicy(
            String packageName, CarAppBlockingPolicy policy, @SetPolicyFlags int flags) {
        if ((flags & FLAG_SET_POLICY_WAIT_FOR_CHANGE) != 0 &&
                Looper.getMainLooper().isCurrentThread()) {
            throw new IllegalStateException(
                    "FLAG_SET_POLICY_WAIT_FOR_CHANGE cannot be used in main thread");
        }
        try {
            mService.setAppBlockingPolicy(packageName, policy, flags);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
    public boolean isActivityDistractionOptimized(String packageName, String className) {
        try {
            return mService.isActivityDistractionOptimized(packageName, className);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

isActivityDistractionOptimized这个方法, 其他的系统应用就有办法知道第三方应用中某一个Activity是否满足UX Restrictions的要求,

而通过setAppBlockingPolicy的方法, 系统应用就能额外配置黑名单策略, 被添加至黑名单中的应用在UX Restrictions使能的情况下会被屏蔽.

CarPackageManagerService 在 系统启动时, 重新配置策略时, 应用安装卸载时, 用户发生切换时都做了很多事情.

对于制造商而言,  CarPackageManagerService中以下系统配置可以按需求修改(packages/services/Car/service/res/values/config.xml)

三. 黑白名单配置

3.1 配置当前显示的Activity不满足规范时, 是否需要将其屏蔽

<!--   Whether to enable Activity blocking for safety. When Activity blocking is enabled,
          only whitelisted safe Activities will be allowed while car is not parked.  -->
<bool name="enableActivityBlockingForSafety">true</bool>

默认值为true, 则系统会屏蔽该Activity,  否则该Activity可以继续运行

3.2 制造商可自定义Activity白名单

在该名单中的页面运行不受 UX Restrictions的约束

<!--   Comma separated list of activities that need to be exempted from getting
          blocked in a UX restricted state.
          Format of each entry is either to specify package name to whitelist the whole package or
          use format of "packagename/activity_classname" for tagging each activities.
          For general guidelines to design distraction optimized apps, please refer
          to Android Auto Driver Distraction Guidelines.  -->
<string name="activityWhitelist" translatable="false"/>

该选项支持填充包名 或  包名 + 具体Activity的格式, 可以添加多个组件, 以逗号区分,例如:

<string name="systemActivityWhitelist" translatable="false">com.android.systemui,com.google.android.permissioncontroller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity,com.android.mtp/com.android.mtp.ReceiverActivity</string>

3.3 Activity黑名单

 在该名单中的应用即使满足 UX Restrictions规范, 依然会被屏蔽.

<!--   Comma separated list of activities that will be blocked during restricted state.
          Format of each entry is either to specify package name to whitelist the whole package
          or use format of "packagename/activity_classname" for tagging each activities. -->
<string name="activityBlacklist" translatable="false"/>

和白名单配置一样, 该选择支持填充包名 或   包名+ 具体Activity的格式, 可以添加多个组件, 用逗号隔开.

3.4  配置屏蔽页面

<!--   Activity to be presented when un-safe activity is launched. Take a look at the javadoc of the
          default implementation.  -->
<string name="activityBlockingActivity" translatable="false">com.android.car/com.android.car.pm.ActivityBlockingActivity</string>

当阻止Activity时, 弹出的系统提示界面, 默认值为com.android.car/com.android.car.pm.ActivityBlockingActivity, 这是在CarService中实现的默认屏蔽页面, 制造商可以根据需要替换该页面.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值