2025년 3월 27일부터 AOSP를 빌드하고 기여하려면 aosp-main
대신 android-latest-release
를 사용하는 것이 좋습니다. 자세한 내용은 AOSP 변경사항을 참고하세요.
데이터 요금제 구현
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
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()));
다음 조건 중 하나에서만 앱이 기기에서 데이터 요금제를 구성할 수 있습니다.
처음 두 가지 조건이 충족되면 공장 출하 시 시스템 이미지에 미리 설치할 필요 없이 사용자가 이동통신사 앱을 설치할 수 있습니다.
OS에서는 구성된 모든 데이터 요금제 세부정보가 보호되고 OS에 원래 세부정보를 제공한 이동통신사 앱에서만 사용할 수 있도록 시행합니다(CDD에서 이를 요구함).
제안된 설계 중 하나는 이동통신사 앱이 유휴 유지 관리 서비스를 사용하여 매일 데이터 요금제 세부정보를 업데이트하는 것이지만, 이동통신사는 이동통신사 내부 SMS 메시지를 통해 데이터 요금제 세부정보를 수신하는 것과 같은 광범위한 메커니즘을 자유롭게 사용할 수 있습니다. 유휴 유지 관리 서비스는 setRequiresDeviceIdle()
및 setRequiresCharging()
을 사용하는 JobScheduler
작업으로 가장 잘 구현됩니다.
OS별 사용량
OS는 다음과 같은 방법으로 SubscriptionPlan API에서 제공하는 데이터 요금제 세부정보를 사용합니다.
- 요금제 세부정보는 설정 앱을 통해 표시되어 사용자에게 정확한 데이터 사용량을 알려주고 업그레이드/업셀을 위한 직접 딥 링크를 이동통신사 앱에 제공합니다.
- 요금제 세부정보를 기반으로 데이터 사용량 경고 및 한도 알림 임계값이 자동으로 구성되며 경고는 한도의 90%로 설정됩니다.
- 이동통신사에서 네트워크가 '혼잡'하다고 일시적으로 표시하면, OS는 시간 이동이 가능한 JobScheduler 작업을 지연하여 이동통신사 네트워크의 부하를 줄입니다.
- 이동통신사에서 네트워크가 '무제한'이라고 일시적으로 표시하면, OS는 이동통신사가 재정의를 지우거나 시간 초과 값(제공된 경우)에 도달할 때까지 모바일 데이터 연결을 '무제한'으로 보고할 수 있습니다.
- 사용자의 현재 데이터 사용량을 전체 데이터 한도와 비교하여 OS는 결제 주기가 끝날 때 사용자의 일반적인 데이터 사용량을 추정하고 앱에서 다중 경로 데이터를 사용하도록 하는 등 잉여 데이터의 10%를 보수적으로 할당하여 사용자 환경을 개선합니다.
맞춤설정 및 유효성 검사
Android 설정 앱은 모든 이동통신사 구성 데이터 요금제 세부정보를 표시하여 사용자가 이동통신사 관계의 가장 정확한 상태를 볼 수 있도록 하며 사용자에게 요금제 업그레이드를 위한 이동통신사 앱 경로를 제공합니다. 설정 앱을 맞춤설정하려는 기기 제조업체는 이러한 세부정보를 계속 표시하는 것이 좋습니다.
이 페이지에 설명된 SubscriptionManager
API는 android.telephony.cts.SubscriptionManagerTest
로 테스트하므로 이동통신사 앱으로 데이터 요금제 세부정보를 구성하고 OS 내에서 변경사항을 전파할 수 있습니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-26(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-26(UTC)"],[],[],null,["# Implement data plans\n\nAndroid 9 lets carriers directly provide authoritative\nplan details to users in the Settings app to reduce user confusion and support\ncalls. On devices running Android 4.0 and higher, users are able to manually\nconfigure their carrier-specific data plan details in the Settings app, for\nexample, setting warnings and limits to manage their data usage.\n\nConfiguration by carrier\n------------------------\n\nTo configure data plans, carriers can add functionality to their existing\nAndroid apps using the\n[`SubscriptionPlan` APIs](https://developer.android.com/reference/android/telephony/SubscriptionPlan.Builder).\nThe APIs are designed to support a wide range of data plan types, including both\nrecurring and non-recurring plans, and plans that change over time.\n\nHere's an example of how to configure a common type of data plan that recurs\nmonthly: \n\n SubscriptionManager sm =\n context.getSystemService(SubscriptionManager.class);\n sm.setSubscriptionPlans(subId, Lists.newArrayList(\n SubscriptionPlan.Builder.createRecurringMonthly(\n ZonedDateTime.parse(\"2016-12-03T10:00:00Z\"))\n .setTitle(\"G-Mobile\")\n .setDataLimit(4_000_000_000L,\n SubscriptionPlan.LIMIT_BEHAVIOR_BILLED)\n .setDataUsage(200_493_293L, dataUsageTimestamp)\n .build()));\n\nThe device only lets an app configure data plans under one of these conditions:\n\n- The SIM card has explicitly defined an app that can manage it, as defined by [`SubscriptionManager.canManageSubscription()`](https://developer.android.com/reference/android/telephony/SubscriptionManager.html#canManageSubscription(android.telephony.SubscriptionInfo)).\n- The carrier has pushed the [`KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING`](https://developer.android.com/reference/android/telephony/CarrierConfigManager#KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING) value via `CarrierConfigManager` to indicate which app can manage the carrier's data plans.\n- The device has an app built into the system image that has the `MANAGE_SUBSCRIPTION_PLANS` permission.\n\nThe first two conditions enable the carrier app to be installed by the user,\nwithout requiring that it be pre-installed into the system image at the factory.\nThe OS enforces (and the CDD requires) that all configured data plan details are\nprotected and are only made available to the carrier app that originally\nprovided the details to the OS.\n\nOne suggested design is for a carrier app to use an idle maintenance service to\nupdate data plan details on a daily basis, but carriers are free to use a wide\nrange of mechanisms, such as receiving data plan details through carrier-internal\nSMS messages. Idle maintenance services are best implemented with a\n`JobScheduler` job that uses\n[`setRequiresDeviceIdle()`](https://developer.android.com/reference/android/app/job/JobInfo.Builder#setRequiresDeviceIdle(boolean))\nand\n[`setRequiresCharging()`](https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setRequiresCharging(boolean)).\n\nUsage by OS\n-----------\n\nThe OS uses the data plan details provided by the SubscriptionPlan APIs in the\nfollowing ways:\n\n- The plan details are surfaced via the Settings app to display accurate data usage to users and to provide [direct deep links into the carrier app](https://developer.android.com/reference/android/telephony/SubscriptionManager.html#ACTION_MANAGE_SUBSCRIPTION_PLANS) for upgrade/upsell opportunities.\n- The data usage warning and limit notification thresholds are automatically configured based on the plan details; the warning is set to 90% of the limit.\n- If the carrier temporarily indicates the network is [\"congested\"](https://developer.android.com/reference/android/telephony/SubscriptionManager.html#setSubscriptionOverrideCongested(int,%20boolean,%20long)), the OS delays JobScheduler jobs that can be time-shifted, reducing the load on the carrier network.\n- If the carrier temporarily indicates the network is [\"unmetered\"](https://developer.android.com/reference/android/telephony/SubscriptionManager#setSubscriptionOverrideUnmetered(int,%20boolean,%20long)), the OS can report the cellular connection as \"unmetered\" until the carrier clears the override, or until the timeout value (if provided) is reached.\n- By comparing the user's current data usage with the overall data limit, the OS estimates the user's normal data usage at the end of the billing cycle and conservatively allocates 10% of any surplus data to improve the user experience, for example, by letting apps use multi-path data.\n\nCustomization and validation\n----------------------------\n\nThe Android Settings app displays all carrier-configured data plan details,\nensuring that users see the most accurate status of their carrier relationship,\nand offering users a path into the carrier app to upgrade their plan. Device\nmanufacturers choosing to customize the Settings app are recommended to continue\nsurfacing these details.\n\nThe `SubscriptionManager` APIs described on this page are tested by\n`android.telephony.cts.SubscriptionManagerTest`, which ensures that data plan\ndetails can be configured by carrier apps and that changes are propagated within\nthe OS."]]