Android 9 可让运营商直接在“设置”应用中向用户提供权威的套餐详情,以减少用户的困惑和支持来电次数。在运行 Android 4.0 或更高版本的设备上,用户可以在“设置”应用中手动配置特定于运营商的流量套餐详情,例如,设置警告和上限以管理其流量用量。
运营商配置
如需配置流量套餐,运营商可以使用 SubscriptionPlan
API 向其现有 Android 应用中添加功能。这些 API 用于支持各种类型的流量套餐,包括可续费和不可续费套餐以及随时间而变化的套餐。
以下是如何配置按月续费的常见流量套餐类型的示例:
SubscriptionManager sm =
context.getSystemService(SubscriptionManager.class);
sm.setSubscriptionPlans(subId, Lists.newArrayList(
SubscriptionPlan.Builder.createRecurringMonthly(
ZonedDateTime.parse("2016-12-03T10:00:00Z"))
.setTitle("G-Mobile")
.setDataLimit(4_000_000_000L,
SubscriptionPlan.LIMIT_BEHAVIOR_BILLED)
.setDataUsage(200_493_293L, dataUsageTimestamp)
.build()));
仅当符合以下某个条件时,设备才会让应用配置流量套餐:
- SIM 卡已明确指定可对其进行管理的应用(由
SubscriptionManager.canManageSubscription()
定义)。 - 运营商已通过
CarrierConfigManager
推送KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING
值,以指明可管理其流量套餐的应用。 - 设备在系统映像中内置了一个具有
MANAGE_SUBSCRIPTION_PLANS
权限的应用。
若符合前两个条件,运营商应用可由用户直接安装,而无需在出厂前预安装在系统映像中。操作系统强制要求(且 CDD 要求)所有已配置的流量套餐详情一律受到保护,且仅供最初向操作系统提供相应详情的运营商应用使用。
建议的一种设计方案是,让运营商应用使用空闲维护服务来每天更新一次流量套餐详情,但运营商可以自由选择使用各种机制,例如通过运营商内部短信来接收流量套餐详情。最好通过使用 setRequiresDeviceIdle()
和 setRequiresCharging()
的 JobScheduler
作业实现空闲维护服务。
操作系统使用情况
操作系统通过以下方式使用由 SubscriptionPlan API 提供的流量套餐详情:
- 通过“设置”应用来显示套餐详情,以向用户显示准确的流量用量数据,并提供指向运营商应用的直接深层链接以获得升级/追加销售的机会。
- 系统会根据套餐详情自动配置流量消耗警告和上限通知阈值;用量达到上限的 90% 时便会发出警告提醒。
- 如果运营商暂时提示网络“拥挤”,操作系统将延迟可进行时移的 JobScheduler 作业,从而减少运营商网络的负载。
- 如果运营商暂时提示网络“不按流量计费”,操作系统会将移动网络连接报告为“不按流量计费”,直到运营商清除替换内容或达到超时值(如果提供)。
- 通过将用户当前的流量用量与总体流量上限进行比较,操作系统会估算用户在结算周期结束时的正常流量用量,并适当分配 10% 的剩余流量以改善用户体验,例如让应用使用来自多个途径的流量。
自定义和验证
Android 的“设置”应用将显示由运营商配置的所有流量套餐详情,从而确保用户可以看到最准确的运营商关系状态,并为用户提供进入运营商应用的途径以升级其套餐。建议选择自定义“设置”应用的设备制造商,继续显示相关详情。
本页所述的 SubscriptionManager
API 由 android.telephony.cts.SubscriptionManagerTest
进行测试,这样可确保流量套餐详情可通过运营商应用配置,且更改得以应用于整个操作系统。