ImsMmTelManager
  public
  
  
  
  class
  ImsMmTelManager
  
    extends Object
  
  
  
  
  
      implements
      
        RegistrationManager
      
  
  
| java.lang.Object | |
| ↳ | android.telephony.ims.ImsMmTelManager | 
A manager for the MmTel (Multimedia Telephony) feature of an IMS network, given an associated
 subscription.
 Allows a user to query the IMS MmTel feature information for a subscription, register for
 registration and MmTel capability status callbacks, as well as query/modify user settings for the
 associated subscription.
 Use ImsManager.getImsMmTelManager(int) to get an instance of this
 manager.
 
 Requires the PackageManager#FEATURE_TELEPHONY_IMS feature which can be detected using PackageManager.hasSystemFeature(String).
Summary
| Nested classes | |
|---|---|
| 
        
        
        
        
        class | ImsMmTelManager.CapabilityCallbackReceives IMS capability status updates from the ImsService. | 
| Constants | |
|---|---|
| int | WIFI_MODE_CELLULAR_PREFERREDPrefer registering for IMS over LTE if LTE signal quality is high enough. | 
| int | WIFI_MODE_WIFI_ONLYRegister for IMS over IWLAN if WiFi signal quality is high enough. | 
| int | WIFI_MODE_WIFI_PREFERREDPrefer registering for IMS over IWLAN if possible if WiFi signal quality is high enough. | 
| Inherited constants | 
|---|
| Public methods | |
|---|---|
| 
        
        
        
        
        
        void | 
      getRegistrationTransportType(Executor executor, Consumer<Integer> transportTypeCallback)
      Requires Permission:  | 
| 
        
        
        
        
        
        int | 
      getVoWiFiModeSetting()
      Returns the user's voice over WiFi Roaming mode setting associated with the device. | 
| 
        
        
        
        
        
        boolean | 
      isAdvancedCallingSettingEnabled()
      Query the user\u2019s setting for \u201cAdvanced Calling\u201d or "Enhanced 4G LTE", which is used to enable MmTel IMS features, depending on the carrier configuration for the current subscription. | 
| 
        
        
        
        
        
        boolean | 
      isCrossSimCallingEnabled()
      This configuration is meaningful only on dual sim device. | 
| 
        
        
        
        
        
        boolean | 
      isTtyOverVolteEnabled()
      
 | 
| 
        
        
        
        
        
        boolean | 
      isVoWiFiRoamingSettingEnabled()
      Returns the user's voice over WiFi roaming setting associated with the current subscription. | 
| 
        
        
        
        
        
        boolean | 
      isVoWiFiSettingEnabled()
      
 | 
| 
        
        
        
        
        
        boolean | 
      isVtSettingEnabled()
      The user's setting for whether or not they have enabled the "Video Calling" setting. | 
| 
        
        
        
        
        
        void | 
      registerImsRegistrationCallback(Executor executor, RegistrationManager.RegistrationCallback c)
      Requires Permission:  | 
| 
        
        
        
        
        
        void | 
      registerImsStateCallback(Executor executor, ImsStateCallback callback)
      Register a new callback, which is used to notify the registrant of changes to the state of the underlying IMS service that is attached to telephony to implement IMS functionality. | 
| 
        
        
        
        
        
        void | 
      registerMmTelCapabilityCallback(Executor executor, ImsMmTelManager.CapabilityCallback c)
      Registers a  | 
| 
        
        
        
        
        
        void | 
      unregisterImsRegistrationCallback(RegistrationManager.RegistrationCallback c)
      Requires Permission:  | 
| 
        
        
        
        
        
        void | 
      unregisterImsStateCallback(ImsStateCallback callback)
      Unregisters a previously registered callback. | 
| 
        
        
        
        
        
        void | 
      unregisterMmTelCapabilityCallback(ImsMmTelManager.CapabilityCallback c)
      Removes an existing MmTel  | 
| Inherited methods | |
|---|---|
Constants
WIFI_MODE_CELLULAR_PREFERRED
public static final int WIFI_MODE_CELLULAR_PREFERRED
Prefer registering for IMS over LTE if LTE signal quality is high enough.
Constant Value: 1 (0x00000001)
WIFI_MODE_WIFI_ONLY
public static final int WIFI_MODE_WIFI_ONLY
Register for IMS over IWLAN if WiFi signal quality is high enough. Do not hand over to LTE registration if signal quality degrades.
Constant Value: 0 (0x00000000)
WIFI_MODE_WIFI_PREFERRED
public static final int WIFI_MODE_WIFI_PREFERRED
Prefer registering for IMS over IWLAN if possible if WiFi signal quality is high enough.
Constant Value: 2 (0x00000002)
Public methods
getRegistrationTransportType
public void getRegistrationTransportType (Executor executor, Consumer<Integer> transportTypeCallback)
Requires Permission: READ_PRECISE_PHONE_STATE or that the calling app has carrier privileges
 (see TelephonyManager.hasCarrierPrivileges()).
 Access by profile owners is deprecated and will be removed in a future release.
Gets the Transport Type associated with the current IMS registration.
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Parameters | |
|---|---|
| executor | Executor: This value cannot benull.
 Callback and listener events are dispatched through thisExecutor, providing an easy way to control which thread is
 used. To dispatch events through the main thread of your
 application, you can useContext.getMainExecutor().
 Otherwise, provide anExecutorthat dispatches to an appropriate thread. | 
| transportTypeCallback | Consumer: This value cannot benull.
 Value is android.telephony.AccessNetworkConstants.TRANSPORT_TYPE_INVALID,AccessNetworkConstants.TRANSPORT_TYPE_WWAN, orAccessNetworkConstants.TRANSPORT_TYPE_WLAN | 
getVoWiFiModeSetting
public int getVoWiFiModeSetting ()
Returns the user's voice over WiFi Roaming mode setting associated with the device.
This API requires one of the following:
- The caller holds the READ_PRECISE_PHONE_STATE permission.
- If the caller is the device or profile owner, the caller holds the
     Manifest.permission.READ_PRECISE_PHONE_STATEpermission.
- The caller has carrier privileges (see
     TelephonyManager.hasCarrierPrivileges()) on any active subscription.
The profile owner is an app that owns a managed profile on the device; for more details
 see Work profiles.
 Access by profile owners is deprecated and will be removed in a future release.
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Returns | |
|---|---|
| int | The Voice over WiFi Mode preference set by the user, which can be one of the
 following:
 - WIFI_MODE_WIFI_ONLY-WIFI_MODE_CELLULAR_PREFERRED-WIFI_MODE_WIFI_PREFERREDValue is android.telephony.ims.ImsMmTelManager.WIFI_MODE_UNKNOWN,WIFI_MODE_WIFI_ONLY,WIFI_MODE_CELLULAR_PREFERRED, orWIFI_MODE_WIFI_PREFERRED | 
| Throws | |
|---|---|
| IllegalArgumentException | if the subscription associated with this operation is not active (SIM is not inserted, ESIM inactive) or invalid. | 
| UnsupportedOperationException | If the device does not have PackageManager.FEATURE_TELEPHONY_IMS. | 
isAdvancedCallingSettingEnabled
public boolean isAdvancedCallingSettingEnabled ()
Query the user\u2019s setting for \u201cAdvanced Calling\u201d or "Enhanced 4G LTE", which is used to enable MmTel IMS features, depending on the carrier configuration for the current subscription. If this setting is enabled, IMS voice and video telephony over IWLAN/LTE will be enabled as long as the carrier has provisioned these services for the specified subscription. Other IMS services (SMS/UT) are not affected by this user setting and depend on carrier requirements.
Note: If the carrier configuration for advanced calling is not editable or hidden, this method will always return the default value.
This API requires one of the following:
- The caller holds the READ_PRECISE_PHONE_STATE permission.
- If the caller is the device or profile owner, the caller holds the
     Manifest.permission.READ_PRECISE_PHONE_STATEpermission.
- The caller has carrier privileges (see
     TelephonyManager.hasCarrierPrivileges()) on any active subscription.
The profile owner is an app that owns a managed profile on the device; for more details
 see Work profiles.
 Access by profile owners is deprecated and will be removed in a future release.
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Returns | |
|---|---|
| boolean | true if the user's setting for advanced calling is enabled, false otherwise. | 
| Throws | |
|---|---|
| IllegalArgumentException | if the subscription associated with this operation is not active (SIM is not inserted, ESIM inactive) or invalid. | 
| UnsupportedOperationException | If the device does not have PackageManager.FEATURE_TELEPHONY_IMS. | 
isCrossSimCallingEnabled
public boolean isCrossSimCallingEnabled ()
This configuration is meaningful only on dual sim device.
 If enabled, this will result in the device setting up IMS of all other
 active subscriptions over the INTERNET APN of the primary default data subscription
 when any of those subscriptions are roaming or out of service and if wifi is not available
 for VoWifi. This feature will be disabled if
 CarrierConfigManager.KEY_CARRIER_CROSS_SIM_IMS_AVAILABLE_BOOL is set to false.
 
Following are the conditions in which system will try to register IMS over cross sim
- Wifi is not available, one SIM is roaming and the default data SIM is in home network. Then roaming SIM IMS will be registered over INTERNET APN of the default data subscription
- Wifi is not available, one SIM is out of service and the default data SIM is in home network. Then out of service SIM IMS will be registered over INTERNET APN of the default data subscription
This API requires one of the following:
- The caller holds the READ_PRECISE_PHONE_STATE permission.
- If the caller is the device or profile owner, the caller holds the
     Manifest.permission.READ_PRECISE_PHONE_STATEpermission.
- The caller has carrier privileges (see
     TelephonyManager.hasCarrierPrivileges()) on any active subscription.
The profile owner is an app that owns a managed profile on the device; for more details
 see Work profiles.
 Access by profile owners is deprecated and will be removed in a future release.
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Returns | |
|---|---|
| boolean | true if the user's setting for Voice over Cross SIM is enabled and false if it is not | 
| Throws | |
|---|---|
| ImsException | if the IMS service associated with this subscription is not available or the IMS service is not available. | 
| UnsupportedOperationException | If the device does not have PackageManager.FEATURE_TELEPHONY_IMS. | 
isTtyOverVolteEnabled
public boolean isTtyOverVolteEnabled ()
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Returns | |
|---|---|
| boolean | true if TTY over VoLTE is supported This API requires one of the following: 
 The profile owner is an app that owns a managed profile on the device; for more details see Work profiles. Access by profile owners is deprecated and will be removed in a future release. | 
| Throws | |
|---|---|
| IllegalArgumentException | if the subscription associated with this operation is not active (SIM is not inserted, ESIM inactive) or invalid. | 
| UnsupportedOperationException | If the device does not have PackageManager.FEATURE_TELEPHONY_IMS. | 
isVoWiFiRoamingSettingEnabled
public boolean isVoWiFiRoamingSettingEnabled ()
Returns the user's voice over WiFi roaming setting associated with the current subscription.
This API requires one of the following:
- The caller holds the READ_PRECISE_PHONE_STATE permission.
- If the caller is the device or profile owner, the caller holds the
     Manifest.permission.READ_PRECISE_PHONE_STATEpermission.
- The caller has carrier privileges (see
     TelephonyManager.hasCarrierPrivileges()) on any active subscription.
The profile owner is an app that owns a managed profile on the device; for more details
 see Work profiles.
 Access by profile owners is deprecated and will be removed in a future release.
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Returns | |
|---|---|
| boolean | true if the user's setting for Voice over WiFi while roaming is enabled, false if disabled. | 
| Throws | |
|---|---|
| IllegalArgumentException | if the subscription associated with this operation is not active (SIM is not inserted, ESIM inactive) or invalid. | 
| UnsupportedOperationException | If the device does not have PackageManager.FEATURE_TELEPHONY_IMS. | 
isVoWiFiSettingEnabled
public boolean isVoWiFiSettingEnabled ()
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Returns | |
|---|---|
| boolean | true if the user's setting for Voice over WiFi is enabled and false if it is not. This API requires one of the following: 
 The profile owner is an app that owns a managed profile on the device; for more details see Work profiles. Access by profile owners is deprecated and will be removed in a future release. | 
| Throws | |
|---|---|
| IllegalArgumentException | if the subscription associated with this operation is not active (SIM is not inserted, ESIM inactive) or invalid. | 
| UnsupportedOperationException | If the device does not have PackageManager.FEATURE_TELEPHONY_IMS. | 
isVtSettingEnabled
public boolean isVtSettingEnabled ()
The user's setting for whether or not they have enabled the "Video Calling" setting.
Note: If the carrier configuration for advanced calling is not editable or hidden, this method will always return the default value.
This API requires one of the following:
- The caller holds the READ_PRECISE_PHONE_STATE permission.
- If the caller is the device or profile owner, the caller holds the
     Manifest.permission.READ_PRECISE_PHONE_STATEpermission.
- The caller has carrier privileges (see
     TelephonyManager.hasCarrierPrivileges()) on any active subscription.
The profile owner is an app that owns a managed profile on the device; for more details
 see Work profiles.
 Access by profile owners is deprecated and will be removed in a future release.
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Returns | |
|---|---|
| boolean | true if the user\u2019s \u201cVideo Calling\u201d setting is currently enabled. | 
| Throws | |
|---|---|
| IllegalArgumentException | if the subscription associated with this operation is not active (SIM is not inserted, ESIM inactive) or invalid. | 
| UnsupportedOperationException | If the device does not have PackageManager.FEATURE_TELEPHONY_IMS. | 
registerImsRegistrationCallback
public void registerImsRegistrationCallback (Executor executor, RegistrationManager.RegistrationCallback c)
Requires Permission: READ_PRECISE_PHONE_STATE or that the calling app has carrier privileges
 (see TelephonyManager.hasCarrierPrivileges()).
 Registers a RegistrationCallback with the system. Use
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Parameters | |
|---|---|
| executor | Executor: This value cannot benull.
 Callback and listener events are dispatched through thisExecutor, providing an easy way to control which thread is
 used. To dispatch events through the main thread of your
 application, you can useContext.getMainExecutor().
 Otherwise, provide anExecutorthat dispatches to an appropriate thread. | 
| c | RegistrationManager.RegistrationCallback: This value cannot benull. | 
| Throws | |
|---|---|
| ImsException | |
registerImsStateCallback
public void registerImsStateCallback (Executor executor, ImsStateCallback callback)
Register a new callback, which is used to notify the registrant of changes to
 the state of the underlying IMS service that is attached to telephony to
 implement IMS functionality. If the manager is created for
 the SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
 this throws an ImsException.
 
Requires Permission:
 READ_PRECISE_PHONE_STATE
 or that the calling app has carrier privileges
 (see TelephonyManager.hasCarrierPrivileges()).
 
 Requires Manifest.permission.READ_PRECISE_PHONE_STATE or android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
| Parameters | |
|---|---|
| executor | Executor: the Executor that will be used to call theImsStateCallback.
 This value cannot benull. | 
| callback | ImsStateCallback: The callback instance being registered.
 This value cannot benull. | 
| Throws | |
|---|---|
| ImsException | in the case that the callback can not be registered.
 See ImsException.getCodefor more information on when this is called. | 
registerMmTelCapabilityCallback
public void registerMmTelCapabilityCallback (Executor executor, ImsMmTelManager.CapabilityCallback c)
Registers a CapabilityCallback with the system, which will provide MmTel service
 availability updates for the subscription specified in
 ImsManager.getImsMmTelManager(int).
 Use SubscriptionManager.OnSubscriptionsChangedListener to listen to
 subscription changed events and call
 unregisterMmTelCapabilityCallback(android.telephony.ims.ImsMmTelManager.CapabilityCallback) to clean up.
 
This API requires one of the following:
- The caller holds the READ_PRECISE_PHONE_STATE permission.
- If the caller is the device or profile owner, the caller holds the
     Manifest.permission.READ_PRECISE_PHONE_STATEpermission.
- The caller has carrier privileges (see
     TelephonyManager.hasCarrierPrivileges()) on any active subscription.
The profile owner is an app that owns a managed profile on the device; for more details
 see Work profiles.
 Access by profile owners is deprecated and will be removed in a future release.
 When the callback is registered, it will initiate the callback c to be called with the
 current capabilities.
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Parameters | |
|---|---|
| executor | Executor: The executor the callback events should be run on.
 This value cannot benull.
 Callback and listener events are dispatched through thisExecutor, providing an easy way to control which thread is
 used. To dispatch events through the main thread of your
 application, you can useContext.getMainExecutor().
 Otherwise, provide anExecutorthat dispatches to an appropriate thread. | 
| c | ImsMmTelManager.CapabilityCallback: The MmTelCapabilityCallbackto be registered.
 This value cannot benull. | 
| Throws | |
|---|---|
| ImsException | if the subscription associated with this callback is valid, but
 the ImsServiceassociated with the subscription is not available. This can happen if
 the service crashed, for example. SeeImsException.getCode()for a more detailed
 reason. | 
unregisterImsRegistrationCallback
public void unregisterImsRegistrationCallback (RegistrationManager.RegistrationCallback c)
Requires Permission: READ_PRECISE_PHONE_STATE or that the calling app has carrier privileges
 (see TelephonyManager.hasCarrierPrivileges()).
 Access by profile owners is deprecated and will be removed in a future release.
Removes an existing RegistrationCallback.
 When the subscription associated with this callback is removed (SIM removed, ESIM swap,
 etc...), this callback will automatically be removed. If this method is called for an
 inactive subscription, it will result in a no-op.
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Parameters | |
|---|---|
| c | RegistrationManager.RegistrationCallback: This value cannot benull. | 
unregisterImsStateCallback
public void unregisterImsStateCallback (ImsStateCallback callback)
Unregisters a previously registered callback.
| Parameters | |
|---|---|
| callback | ImsStateCallback: The callback instance to be unregistered.
 This value cannot benull. | 
unregisterMmTelCapabilityCallback
public void unregisterMmTelCapabilityCallback (ImsMmTelManager.CapabilityCallback c)
Removes an existing MmTel CapabilityCallback.
 When the subscription associated with this callback is removed (SIM removed, ESIM swap,
 etc...), this callback will automatically be removed. If this method is called for an
 inactive subscription, it will result in a no-op.
 
This API requires one of the following:
- The caller holds the READ_PRECISE_PHONE_STATE permission.
- If the caller is the device or profile owner, the caller holds the
     Manifest.permission.READ_PRECISE_PHONE_STATEpermission.
- The caller has carrier privileges (see
     TelephonyManager.hasCarrierPrivileges()) on any active subscription.
The profile owner is an app that owns a managed profile on the device; for more details
 see Work profiles.
 Access by profile owners is deprecated and will be removed in a future release.
 
 Requires android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE or Manifest.permission.READ_PRECISE_PHONE_STATE
| Parameters | |
|---|---|
| c | ImsMmTelManager.CapabilityCallback: The MmTelCapabilityCallbackto be removed.
 This value cannot benull. | 
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-02-10 UTC.
