实现流量套餐

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()));

仅当符合以下某个条件时,设备才会让应用配置流量套餐:

若符合前两个条件,运营商应用可由用户直接安装,而无需在出厂前预安装在系统映像中。操作系统强制要求(且 CDD 要求)所有已配置的流量套餐详情一律受到保护,且仅供最初向操作系统提供相应详情的运营商应用使用。

建议的一种设计方案是,让运营商应用使用空闲维护服务来每天更新一次流量套餐详情,但运营商可以自由选择使用各种机制,例如通过运营商内部短信来接收流量套餐详情。最好通过使用 setRequiresDeviceIdle()setRequiresCharging()JobScheduler 作业实现空闲维护服务。

操作系统使用情况

操作系统通过以下方式使用由 SubscriptionPlan API 提供的流量套餐详情:

  • 通过“设置”应用来显示套餐详情,以向用户显示准确的流量用量数据,并提供指向运营商应用的直接深层链接以获得升级/追加销售的机会。
  • 系统会根据套餐详情自动配置流量用量警告和上限通知阈值;用量达到上限的 90% 时便会发出警告提醒。
  • 如果运营商暂时提示网络“拥挤”,操作系统将延迟可进行时移的 JobScheduler 作业,从而减少运营商网络的负载。
  • 如果运营商暂时提示网络“不按流量计费”,操作系统会将移动网络连接报告为“不按流量计费”,直到运营商清除替换内容或达到超时值(如果提供)。
  • 通过将用户当前的流量用量与总体流量上限进行比较,操作系统会估算用户在结算周期结束时的正常流量用量,并适当分配 10% 的剩余流量以改善用户体验,例如让应用使用来自多个途径的流量。

自定义和验证

Android 的“设置”应用将显示由运营商配置的所有流量套餐详情,从而确保用户可以看到最准确的运营商关系状态,并为用户提供进入运营商应用的途径以升级其套餐。建议选择自定义“设置”应用的设备制造商,继续显示相关详情。

上述 SubscriptionManager API 由 android.telephony.cts.SubscriptionManagerTest 进行测试,这样可确保流量套餐详情可通过运营商应用配置,且更改得以应用于整个操作系统。