|
|
|
|
@@ -20,6 +20,7 @@ import static android.companion.virtual.VirtualDeviceManager.DEVICE_ID_DEFAULT;
|
|
|
|
|
import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_DEFAULT;
|
|
|
|
|
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_AUDIO;
|
|
|
|
|
|
|
|
|
|
import android.Manifest;
|
|
|
|
|
import android.annotation.CallbackExecutor;
|
|
|
|
|
import android.annotation.IntDef;
|
|
|
|
|
import android.annotation.IntRange;
|
|
|
|
|
@@ -407,7 +408,7 @@ public class AudioManager {
|
|
|
|
|
public static final int STREAM_ACCESSIBILITY = AudioSystem.STREAM_ACCESSIBILITY;
|
|
|
|
|
/** @hide Used to identify the volume of audio streams for virtual assistant */
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public static final int STREAM_ASSISTANT = AudioSystem.STREAM_ASSISTANT;
|
|
|
|
|
|
|
|
|
|
/** Number of audio streams */
|
|
|
|
|
@@ -1038,7 +1039,7 @@ public class AudioManager {
|
|
|
|
|
|
|
|
|
|
/** @hide */
|
|
|
|
|
@UnsupportedAppUsage
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void setMasterMute(boolean mute, int flags) {
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
try {
|
|
|
|
|
@@ -1346,7 +1347,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void setVolumeIndexForAttributes(@NonNull AudioAttributes attr, int index, int flags) {
|
|
|
|
|
Preconditions.checkNotNull(attr, "attr must not be null");
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
@@ -1370,7 +1371,7 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@IntRange(from = 0)
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public int getVolumeIndexForAttributes(@NonNull AudioAttributes attr) {
|
|
|
|
|
Preconditions.checkNotNull(attr, "attr must not be null");
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
@@ -1391,7 +1392,7 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@IntRange(from = 0)
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public int getMaxVolumeIndexForAttributes(@NonNull AudioAttributes attr) {
|
|
|
|
|
Preconditions.checkNotNull(attr, "attr must not be null");
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
@@ -1412,7 +1413,7 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@IntRange(from = 0)
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public int getMinVolumeIndexForAttributes(@NonNull AudioAttributes attr) {
|
|
|
|
|
Preconditions.checkNotNull(attr, "attr must not be null");
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
@@ -1429,7 +1430,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void setSupportedSystemUsages(@NonNull @AttributeSystemUsage int[] systemUsages) {
|
|
|
|
|
Objects.requireNonNull(systemUsages, "systemUsages must not be null");
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
@@ -1446,7 +1447,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public @NonNull @AttributeSystemUsage int[] getSupportedSystemUsages() {
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
try {
|
|
|
|
|
@@ -1555,7 +1556,7 @@ public class AudioManager {
|
|
|
|
|
*
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
|
|
|
|
|
@UnsupportedAppUsage
|
|
|
|
|
public void forceVolumeControlStream(int streamType) {
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
@@ -1752,7 +1753,7 @@ public class AudioManager {
|
|
|
|
|
* @return true if the operation was successful, false otherwise
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public boolean setPreferredDeviceForStrategy(@NonNull AudioProductStrategy strategy,
|
|
|
|
|
@NonNull AudioDeviceAttributes device) {
|
|
|
|
|
return setPreferredDevicesForStrategy(strategy, Arrays.asList(device));
|
|
|
|
|
@@ -1768,7 +1769,7 @@ public class AudioManager {
|
|
|
|
|
* device set for example)
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public boolean removePreferredDeviceForStrategy(@NonNull AudioProductStrategy strategy) {
|
|
|
|
|
Objects.requireNonNull(strategy);
|
|
|
|
|
try {
|
|
|
|
|
@@ -1791,7 +1792,7 @@ public class AudioManager {
|
|
|
|
|
* ever set or if the strategy is invalid
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@Nullable
|
|
|
|
|
public AudioDeviceAttributes getPreferredDeviceForStrategy(
|
|
|
|
|
@NonNull AudioProductStrategy strategy) {
|
|
|
|
|
@@ -1813,7 +1814,7 @@ public class AudioManager {
|
|
|
|
|
* @return true if the operation was successful, false otherwise
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public boolean setPreferredDevicesForStrategy(@NonNull AudioProductStrategy strategy,
|
|
|
|
|
@NonNull List<AudioDeviceAttributes> devices) {
|
|
|
|
|
Objects.requireNonNull(strategy);
|
|
|
|
|
@@ -1843,7 +1844,7 @@ public class AudioManager {
|
|
|
|
|
* @return list of the preferred devices for that strategy
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@NonNull
|
|
|
|
|
public List<AudioDeviceAttributes> getPreferredDevicesForStrategy(
|
|
|
|
|
@NonNull AudioProductStrategy strategy) {
|
|
|
|
|
@@ -1867,7 +1868,7 @@ public class AudioManager {
|
|
|
|
|
* @return true if the operation was successful, false otherwise
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public boolean setDeviceAsNonDefaultForStrategy(@NonNull AudioProductStrategy strategy,
|
|
|
|
|
@NonNull AudioDeviceAttributes device) {
|
|
|
|
|
Objects.requireNonNull(strategy);
|
|
|
|
|
@@ -1891,7 +1892,7 @@ public class AudioManager {
|
|
|
|
|
* device set for example)
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public boolean removeDeviceAsNonDefaultForStrategy(@NonNull AudioProductStrategy strategy,
|
|
|
|
|
@NonNull AudioDeviceAttributes device) {
|
|
|
|
|
Objects.requireNonNull(strategy);
|
|
|
|
|
@@ -1913,7 +1914,7 @@ public class AudioManager {
|
|
|
|
|
* @return list of non-default devices for the strategy
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@NonNull
|
|
|
|
|
public List<AudioDeviceAttributes> getNonDefaultDevicesForStrategy(
|
|
|
|
|
@NonNull AudioProductStrategy strategy) {
|
|
|
|
|
@@ -1996,7 +1997,7 @@ public class AudioManager {
|
|
|
|
|
* Executor, AudioManager.OnPreferredDevicesForStrategyChangedListener)} instead
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@Deprecated
|
|
|
|
|
public void addOnPreferredDeviceForStrategyChangedListener(
|
|
|
|
|
@NonNull @CallbackExecutor Executor executor,
|
|
|
|
|
@@ -2013,7 +2014,7 @@ public class AudioManager {
|
|
|
|
|
* AudioManager.OnPreferredDevicesForStrategyChangedListener)} instead
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@Deprecated
|
|
|
|
|
public void removeOnPreferredDeviceForStrategyChangedListener(
|
|
|
|
|
@NonNull OnPreferredDeviceForStrategyChangedListener listener) {
|
|
|
|
|
@@ -2028,7 +2029,7 @@ public class AudioManager {
|
|
|
|
|
* @throws SecurityException if the caller doesn't hold the required permission
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void addOnPreferredDevicesForStrategyChangedListener(
|
|
|
|
|
@NonNull @CallbackExecutor Executor executor,
|
|
|
|
|
@NonNull OnPreferredDevicesForStrategyChangedListener listener)
|
|
|
|
|
@@ -2046,7 +2047,7 @@ public class AudioManager {
|
|
|
|
|
* @param listener
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void removeOnPreferredDevicesForStrategyChangedListener(
|
|
|
|
|
@NonNull OnPreferredDevicesForStrategyChangedListener listener) {
|
|
|
|
|
Objects.requireNonNull(listener);
|
|
|
|
|
@@ -2092,7 +2093,7 @@ public class AudioManager {
|
|
|
|
|
* @throws SecurityException if the caller doesn't hold the required permission
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void addOnNonDefaultDevicesForStrategyChangedListener(
|
|
|
|
|
@NonNull @CallbackExecutor Executor executor,
|
|
|
|
|
@NonNull OnNonDefaultDevicesForStrategyChangedListener listener)
|
|
|
|
|
@@ -2112,7 +2113,7 @@ public class AudioManager {
|
|
|
|
|
* @param listener
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void removeOnNonDefaultDevicesForStrategyChangedListener(
|
|
|
|
|
@NonNull OnNonDefaultDevicesForStrategyChangedListener listener) {
|
|
|
|
|
Objects.requireNonNull(listener);
|
|
|
|
|
@@ -2206,7 +2207,7 @@ public class AudioManager {
|
|
|
|
|
* @return true if the operation was successful, false otherwise
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public boolean setPreferredDeviceForCapturePreset(@MediaRecorder.SystemSource int capturePreset,
|
|
|
|
|
@NonNull AudioDeviceAttributes device) {
|
|
|
|
|
return setPreferredDevicesForCapturePreset(capturePreset, Arrays.asList(device));
|
|
|
|
|
@@ -2220,7 +2221,7 @@ public class AudioManager {
|
|
|
|
|
* device set for example)
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public boolean clearPreferredDevicesForCapturePreset(
|
|
|
|
|
@MediaRecorder.SystemSource int capturePreset) {
|
|
|
|
|
if (!MediaRecorder.isValidAudioSource(capturePreset)) {
|
|
|
|
|
@@ -2243,7 +2244,7 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@NonNull
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public List<AudioDeviceAttributes> getPreferredDevicesForCapturePreset(
|
|
|
|
|
@MediaRecorder.SystemSource int capturePreset) {
|
|
|
|
|
if (!MediaRecorder.isValidAudioSource(capturePreset)) {
|
|
|
|
|
@@ -2315,7 +2316,7 @@ public class AudioManager {
|
|
|
|
|
* @throws SecurityException if the caller doesn't hold the required permission
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void addOnPreferredDevicesForCapturePresetChangedListener(
|
|
|
|
|
@NonNull @CallbackExecutor Executor executor,
|
|
|
|
|
@NonNull OnPreferredDevicesForCapturePresetChangedListener listener)
|
|
|
|
|
@@ -2341,7 +2342,7 @@ public class AudioManager {
|
|
|
|
|
* @param listener
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void removeOnPreferredDevicesForCapturePresetChangedListener(
|
|
|
|
|
@NonNull OnPreferredDevicesForCapturePresetChangedListener listener) {
|
|
|
|
|
Objects.requireNonNull(listener);
|
|
|
|
|
@@ -2785,7 +2786,7 @@ public class AudioManager {
|
|
|
|
|
/**
|
|
|
|
|
* Start bluetooth SCO audio connection.
|
|
|
|
|
* <p>Requires Permission:
|
|
|
|
|
* {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS}.
|
|
|
|
|
* {@link Manifest.permission#MODIFY_AUDIO_SETTINGS}.
|
|
|
|
|
* <p>This method can be used by applications wanting to send and received audio
|
|
|
|
|
* to/from a bluetooth SCO headset while the phone is not in call.
|
|
|
|
|
* <p>As the SCO connection establishment can take several seconds,
|
|
|
|
|
@@ -2842,7 +2843,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
* Start bluetooth SCO audio connection in virtual call mode.
|
|
|
|
|
* <p>Requires Permission:
|
|
|
|
|
* {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS}.
|
|
|
|
|
* {@link Manifest.permission#MODIFY_AUDIO_SETTINGS}.
|
|
|
|
|
* <p>Similar to {@link #startBluetoothSco()} with explicit selection of virtual call mode.
|
|
|
|
|
* Telephony and communication applications (VoIP, Video Chat) should preferably select
|
|
|
|
|
* virtual call mode.
|
|
|
|
|
@@ -2866,7 +2867,7 @@ public class AudioManager {
|
|
|
|
|
/**
|
|
|
|
|
* Stop bluetooth SCO audio connection.
|
|
|
|
|
* <p>Requires Permission:
|
|
|
|
|
* {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS}.
|
|
|
|
|
* {@link Manifest.permission#MODIFY_AUDIO_SETTINGS}.
|
|
|
|
|
* <p>This method must be called by applications having requested the use of
|
|
|
|
|
* bluetooth SCO audio with {@link #startBluetoothSco()} when finished with the SCO
|
|
|
|
|
* connection or if connection fails.
|
|
|
|
|
@@ -3454,7 +3455,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
@RequiresPermission(Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
public void setHfpEnabled(boolean enable) {
|
|
|
|
|
AudioSystem.setParameters("hfp_enable=" + enable);
|
|
|
|
|
}
|
|
|
|
|
@@ -3463,7 +3464,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
@RequiresPermission(Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
public void setHfpVolume(int volume) {
|
|
|
|
|
AudioSystem.setParameters("hfp_volume=" + volume);
|
|
|
|
|
}
|
|
|
|
|
@@ -3472,7 +3473,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
@RequiresPermission(Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
public void setHfpSamplingRate(int rate) {
|
|
|
|
|
AudioSystem.setParameters("hfp_set_sampling_rate=" + rate);
|
|
|
|
|
}
|
|
|
|
|
@@ -3481,7 +3482,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
@RequiresPermission(Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
public void setBluetoothHeadsetProperties(@NonNull String name, boolean hasNrecEnabled,
|
|
|
|
|
boolean hasWbsEnabled) {
|
|
|
|
|
AudioSystem.setParameters("bt_headset_name=" + name
|
|
|
|
|
@@ -3493,7 +3494,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
@RequiresPermission(Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
public void setA2dpSuspended(boolean enable) {
|
|
|
|
|
AudioSystem.setParameters("A2dpSuspended=" + enable);
|
|
|
|
|
}
|
|
|
|
|
@@ -3506,7 +3507,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
@RequiresPermission(Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
public void setLeAudioSuspended(boolean enable) {
|
|
|
|
|
AudioSystem.setParameters("LeAudioSuspended=" + enable);
|
|
|
|
|
}
|
|
|
|
|
@@ -4316,7 +4317,7 @@ public class AudioManager {
|
|
|
|
|
* @throws IllegalArgumentException
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
|
|
|
|
|
public int requestAudioFocus(OnAudioFocusChangeListener l,
|
|
|
|
|
@NonNull AudioAttributes requestAttributes,
|
|
|
|
|
int durationHint,
|
|
|
|
|
@@ -4357,8 +4358,8 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(anyOf= {
|
|
|
|
|
android.Manifest.permission.MODIFY_PHONE_STATE,
|
|
|
|
|
android.Manifest.permission.MODIFY_AUDIO_ROUTING
|
|
|
|
|
Manifest.permission.MODIFY_PHONE_STATE,
|
|
|
|
|
Manifest.permission.MODIFY_AUDIO_ROUTING
|
|
|
|
|
})
|
|
|
|
|
public int requestAudioFocus(OnAudioFocusChangeListener l,
|
|
|
|
|
@NonNull AudioAttributes requestAttributes,
|
|
|
|
|
@@ -4502,7 +4503,7 @@ public class AudioManager {
|
|
|
|
|
* @throws IllegalArgumentException when trying to lock focus without an AudioPolicy
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public int requestAudioFocus(@NonNull AudioFocusRequest afr, @Nullable AudioPolicy ap) {
|
|
|
|
|
if (afr == null) {
|
|
|
|
|
throw new NullPointerException("Illegal null AudioFocusRequest");
|
|
|
|
|
@@ -4689,7 +4690,7 @@ public class AudioManager {
|
|
|
|
|
* @param ap a valid registered {@link AudioPolicy} configured as a focus policy.
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void setFocusRequestResult(@NonNull AudioFocusInfo afi,
|
|
|
|
|
@FocusRequestResult int requestResult, @NonNull AudioPolicy ap) {
|
|
|
|
|
if (afi == null) {
|
|
|
|
|
@@ -4728,7 +4729,7 @@ public class AudioManager {
|
|
|
|
|
* @throws NullPointerException if the {@link AudioFocusInfo} or {@link AudioPolicy} are null.
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public int dispatchAudioFocusChange(@NonNull AudioFocusInfo afi, int focusChange,
|
|
|
|
|
@NonNull AudioPolicy ap) {
|
|
|
|
|
if (afi == null) {
|
|
|
|
|
@@ -4988,11 +4989,11 @@ public class AudioManager {
|
|
|
|
|
* @param policy the non-null {@link AudioPolicy} to register.
|
|
|
|
|
* @return {@link #ERROR} if there was an error communicating with the registration service
|
|
|
|
|
* or if the user doesn't have the required
|
|
|
|
|
* {@link android.Manifest.permission#MODIFY_AUDIO_ROUTING} permission,
|
|
|
|
|
* {@link Manifest.permission#MODIFY_AUDIO_ROUTING} permission,
|
|
|
|
|
* {@link #SUCCESS} otherwise.
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public int registerAudioPolicy(@NonNull AudioPolicy policy) {
|
|
|
|
|
return registerAudioPolicyStatic(policy);
|
|
|
|
|
}
|
|
|
|
|
@@ -5026,7 +5027,7 @@ public class AudioManager {
|
|
|
|
|
* @param policy the non-null {@link AudioPolicy} to unregister.
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void unregisterAudioPolicyAsync(@NonNull AudioPolicy policy) {
|
|
|
|
|
unregisterAudioPolicyAsyncStatic(policy);
|
|
|
|
|
}
|
|
|
|
|
@@ -5052,7 +5053,7 @@ public class AudioManager {
|
|
|
|
|
* @param policy the non-null {@link AudioPolicy} to unregister.
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void unregisterAudioPolicy(@NonNull AudioPolicy policy) {
|
|
|
|
|
Preconditions.checkNotNull(policy, "Illegal null AudioPolicy argument");
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
@@ -5853,8 +5854,8 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(anyOf = {
|
|
|
|
|
android.Manifest.permission.MODIFY_AUDIO_ROUTING,
|
|
|
|
|
android.Manifest.permission.QUERY_AUDIO_STATE
|
|
|
|
|
Manifest.permission.MODIFY_AUDIO_ROUTING,
|
|
|
|
|
Manifest.permission.QUERY_AUDIO_STATE
|
|
|
|
|
})
|
|
|
|
|
public @NonNull List<AudioDeviceAttributes> getDevicesForAttributes(
|
|
|
|
|
@NonNull AudioAttributes attributes) {
|
|
|
|
|
@@ -5929,8 +5930,8 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(anyOf = {
|
|
|
|
|
android.Manifest.permission.MODIFY_AUDIO_ROUTING,
|
|
|
|
|
android.Manifest.permission.QUERY_AUDIO_STATE
|
|
|
|
|
Manifest.permission.MODIFY_AUDIO_ROUTING,
|
|
|
|
|
Manifest.permission.QUERY_AUDIO_STATE
|
|
|
|
|
})
|
|
|
|
|
public void addOnDevicesForAttributesChangedListener(@NonNull AudioAttributes attributes,
|
|
|
|
|
@NonNull @CallbackExecutor Executor executor,
|
|
|
|
|
@@ -5960,8 +5961,8 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(anyOf = {
|
|
|
|
|
android.Manifest.permission.MODIFY_AUDIO_ROUTING,
|
|
|
|
|
android.Manifest.permission.QUERY_AUDIO_STATE
|
|
|
|
|
Manifest.permission.MODIFY_AUDIO_ROUTING,
|
|
|
|
|
Manifest.permission.QUERY_AUDIO_STATE
|
|
|
|
|
})
|
|
|
|
|
public void removeOnDevicesForAttributesChangedListener(
|
|
|
|
|
@NonNull OnDevicesForAttributesChangedListener listener) {
|
|
|
|
|
@@ -6119,7 +6120,10 @@ public class AudioManager {
|
|
|
|
|
* @param deviceVolumeBehavior one of the device behaviors
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(anyOf = {
|
|
|
|
|
Manifest.permission.MODIFY_AUDIO_ROUTING,
|
|
|
|
|
Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS
|
|
|
|
|
})
|
|
|
|
|
public void setDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device,
|
|
|
|
|
@DeviceVolumeBehavior int deviceVolumeBehavior) {
|
|
|
|
|
// verify arguments (validity of device type is enforced in server)
|
|
|
|
|
@@ -6143,8 +6147,9 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(anyOf = {
|
|
|
|
|
android.Manifest.permission.MODIFY_AUDIO_ROUTING,
|
|
|
|
|
android.Manifest.permission.QUERY_AUDIO_STATE
|
|
|
|
|
Manifest.permission.MODIFY_AUDIO_ROUTING,
|
|
|
|
|
Manifest.permission.QUERY_AUDIO_STATE,
|
|
|
|
|
Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS
|
|
|
|
|
})
|
|
|
|
|
public @DeviceVolumeBehavior
|
|
|
|
|
int getDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device) {
|
|
|
|
|
@@ -6165,8 +6170,9 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@RequiresPermission(anyOf = {
|
|
|
|
|
android.Manifest.permission.MODIFY_AUDIO_ROUTING,
|
|
|
|
|
android.Manifest.permission.QUERY_AUDIO_STATE
|
|
|
|
|
Manifest.permission.MODIFY_AUDIO_ROUTING,
|
|
|
|
|
Manifest.permission.QUERY_AUDIO_STATE,
|
|
|
|
|
Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS
|
|
|
|
|
})
|
|
|
|
|
public boolean isFullVolumeDevice() {
|
|
|
|
|
final AudioAttributes attributes = new AudioAttributes.Builder()
|
|
|
|
|
@@ -6189,7 +6195,7 @@ public class AudioManager {
|
|
|
|
|
* {@hide}
|
|
|
|
|
*/
|
|
|
|
|
@UnsupportedAppUsage
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void setWiredDeviceConnectionState(int device, int state, String address, String name) {
|
|
|
|
|
AudioDeviceAttributes attributes = new AudioDeviceAttributes(device, address, name);
|
|
|
|
|
setWiredDeviceConnectionState(attributes, state);
|
|
|
|
|
@@ -6202,7 +6208,7 @@ public class AudioManager {
|
|
|
|
|
* {@hide}
|
|
|
|
|
*/
|
|
|
|
|
@UnsupportedAppUsage
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void setWiredDeviceConnectionState(AudioDeviceAttributes attributes, int state) {
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
try {
|
|
|
|
|
@@ -6220,7 +6226,7 @@ public class AudioManager {
|
|
|
|
|
* {@hide}
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void setTestDeviceConnectionState(@NonNull AudioDeviceAttributes device,
|
|
|
|
|
boolean connected) {
|
|
|
|
|
try {
|
|
|
|
|
@@ -6243,7 +6249,7 @@ public class AudioManager {
|
|
|
|
|
* {@hide}
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
@RequiresPermission(Manifest.permission.BLUETOOTH_STACK)
|
|
|
|
|
public void handleBluetoothActiveDeviceChanged(@Nullable BluetoothDevice newDevice,
|
|
|
|
|
@Nullable BluetoothDevice previousDevice,
|
|
|
|
|
@NonNull BluetoothProfileConnectionInfo info) {
|
|
|
|
|
@@ -6363,7 +6369,7 @@ public class AudioManager {
|
|
|
|
|
* or the delay is not in range of {@link #getMaxAdditionalOutputDeviceDelay()}.
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public boolean setAdditionalOutputDeviceDelay(
|
|
|
|
|
@NonNull AudioDeviceInfo device, @IntRange(from = 0) long delayMillis) {
|
|
|
|
|
Objects.requireNonNull(device);
|
|
|
|
|
@@ -6522,7 +6528,7 @@ public class AudioManager {
|
|
|
|
|
* @return the RS2 value used for momentary exposure warnings
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
public float getRs2Value() {
|
|
|
|
|
try {
|
|
|
|
|
return getService().getRs2Value();
|
|
|
|
|
@@ -6536,7 +6542,7 @@ public class AudioManager {
|
|
|
|
|
* Sets the RS2 value used for momentary exposure warnings
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
public void setRs2Value(float rs2Value) {
|
|
|
|
|
try {
|
|
|
|
|
getService().setRs2Value(rs2Value);
|
|
|
|
|
@@ -6550,7 +6556,7 @@ public class AudioManager {
|
|
|
|
|
* @return the current computed sound dose value
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
public float getCsd() {
|
|
|
|
|
try {
|
|
|
|
|
return getService().getCsd();
|
|
|
|
|
@@ -6564,7 +6570,7 @@ public class AudioManager {
|
|
|
|
|
* Sets the computed sound dose value to {@code csd}
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
public void setCsd(float csd) {
|
|
|
|
|
try {
|
|
|
|
|
getService().setCsd(csd);
|
|
|
|
|
@@ -6580,7 +6586,7 @@ public class AudioManager {
|
|
|
|
|
* since this can affect the certification of a device with EN50332-3 regulation.
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
public void forceUseFrameworkMel(boolean useFrameworkMel) {
|
|
|
|
|
try {
|
|
|
|
|
getService().forceUseFrameworkMel(useFrameworkMel);
|
|
|
|
|
@@ -6594,7 +6600,7 @@ public class AudioManager {
|
|
|
|
|
* Forces the computation of CSD on all output devices.
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
public void forceComputeCsdOnAllDevices(boolean computeCsdOnAllDevices) {
|
|
|
|
|
try {
|
|
|
|
|
getService().forceComputeCsdOnAllDevices(computeCsdOnAllDevices);
|
|
|
|
|
@@ -6608,7 +6614,7 @@ public class AudioManager {
|
|
|
|
|
* Returns whether CSD is enabled on this device.
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
|
|
|
|
public boolean isCsdEnabled() {
|
|
|
|
|
try {
|
|
|
|
|
return getService().isCsdEnabled();
|
|
|
|
|
@@ -7642,7 +7648,7 @@ public class AudioManager {
|
|
|
|
|
*
|
|
|
|
|
* @return true if successful, otherwise false
|
|
|
|
|
*/
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.WRITE_SETTINGS)
|
|
|
|
|
@RequiresPermission(Manifest.permission.WRITE_SETTINGS)
|
|
|
|
|
public boolean setEncodedSurroundMode(@EncodedSurroundOutputMode int mode) {
|
|
|
|
|
try {
|
|
|
|
|
return getService().setEncodedSurroundMode(mode);
|
|
|
|
|
@@ -7694,7 +7700,7 @@ public class AudioManager {
|
|
|
|
|
* @param enabled the required surround format state, true for enabled, false for disabled
|
|
|
|
|
* @return true if successful, otherwise false
|
|
|
|
|
*/
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.WRITE_SETTINGS)
|
|
|
|
|
@RequiresPermission(Manifest.permission.WRITE_SETTINGS)
|
|
|
|
|
public boolean setSurroundFormatEnabled(
|
|
|
|
|
@AudioFormat.SurroundSoundEncoding int audioFormat, boolean enabled) {
|
|
|
|
|
try {
|
|
|
|
|
@@ -7758,7 +7764,7 @@ public class AudioManager {
|
|
|
|
|
* Ultrasound playback and capture, false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.ACCESS_ULTRASOUND)
|
|
|
|
|
@RequiresPermission(Manifest.permission.ACCESS_ULTRASOUND)
|
|
|
|
|
public boolean isUltrasoundSupported() {
|
|
|
|
|
try {
|
|
|
|
|
return getService().isUltrasoundSupported();
|
|
|
|
|
@@ -7779,7 +7785,7 @@ public class AudioManager {
|
|
|
|
|
* open. False otherwise.
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD)
|
|
|
|
|
@RequiresPermission(Manifest.permission.CAPTURE_AUDIO_HOTWORD)
|
|
|
|
|
public boolean isHotwordStreamSupported(boolean lookbackAudio) {
|
|
|
|
|
try {
|
|
|
|
|
return getService().isHotwordStreamSupported(lookbackAudio);
|
|
|
|
|
@@ -7803,7 +7809,7 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@NonNull
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public static List<AudioProductStrategy> getAudioProductStrategies() {
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
try {
|
|
|
|
|
@@ -7823,7 +7829,7 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@NonNull
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public static List<AudioVolumeGroup> getAudioVolumeGroups() {
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
try {
|
|
|
|
|
@@ -8075,7 +8081,7 @@ public class AudioManager {
|
|
|
|
|
|
|
|
|
|
/** @hide
|
|
|
|
|
* TODO: make this a @SystemApi */
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void setMultiAudioFocusEnabled(boolean enabled) {
|
|
|
|
|
try {
|
|
|
|
|
getService().setMultiAudioFocusEnabled(enabled);
|
|
|
|
|
@@ -8119,7 +8125,7 @@ public class AudioManager {
|
|
|
|
|
* latest application having selected mode {@link #MODE_IN_COMMUNICATION} or mode
|
|
|
|
|
* {@link #MODE_IN_CALL}. Note that <code>MODE_IN_CALL</code> can only be selected by the main
|
|
|
|
|
* telephony application with permission
|
|
|
|
|
* {@link android.Manifest.permission#MODIFY_PHONE_STATE}.
|
|
|
|
|
* {@link Manifest.permission#MODIFY_PHONE_STATE}.
|
|
|
|
|
* <p> If the requested devices is not currently available, the request will be rejected and
|
|
|
|
|
* the method will return false.
|
|
|
|
|
* <p>This API replaces the following deprecated APIs:
|
|
|
|
|
@@ -8386,7 +8392,7 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.CALL_AUDIO_INTERCEPTION)
|
|
|
|
|
@RequiresPermission(Manifest.permission.CALL_AUDIO_INTERCEPTION)
|
|
|
|
|
public boolean isPstnCallAudioInterceptable() {
|
|
|
|
|
final IAudioService service = getService();
|
|
|
|
|
try {
|
|
|
|
|
@@ -8487,7 +8493,7 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.CALL_AUDIO_INTERCEPTION)
|
|
|
|
|
@RequiresPermission(Manifest.permission.CALL_AUDIO_INTERCEPTION)
|
|
|
|
|
public @NonNull AudioTrack getCallUplinkInjectionAudioTrack(@NonNull AudioFormat format) {
|
|
|
|
|
Objects.requireNonNull(format);
|
|
|
|
|
checkCallRedirectionFormat(format, true /* isOutput */);
|
|
|
|
|
@@ -8559,7 +8565,7 @@ public class AudioManager {
|
|
|
|
|
*/
|
|
|
|
|
@TestApi
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.CALL_AUDIO_INTERCEPTION)
|
|
|
|
|
@RequiresPermission(Manifest.permission.CALL_AUDIO_INTERCEPTION)
|
|
|
|
|
public @NonNull AudioRecord getCallDownlinkExtractionAudioRecord(@NonNull AudioFormat format) {
|
|
|
|
|
Objects.requireNonNull(format);
|
|
|
|
|
checkCallRedirectionFormat(format, false /* isOutput */);
|
|
|
|
|
@@ -8668,7 +8674,7 @@ public class AudioManager {
|
|
|
|
|
* @see #registerMuteAwaitConnectionCallback(Executor, AudioManager.MuteAwaitConnectionCallback)
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void muteAwaitConnection(@NonNull int[] usagesToMute,
|
|
|
|
|
@NonNull AudioDeviceAttributes device,
|
|
|
|
|
long timeout, @NonNull TimeUnit timeUnit) throws IllegalStateException {
|
|
|
|
|
@@ -8698,7 +8704,7 @@ public class AudioManager {
|
|
|
|
|
* or because it timed out)
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public @Nullable AudioDeviceAttributes getMutingExpectedDevice() {
|
|
|
|
|
try {
|
|
|
|
|
return getService().getMutingExpectedDevice();
|
|
|
|
|
@@ -8718,7 +8724,7 @@ public class AudioManager {
|
|
|
|
|
* {@link #muteAwaitConnection(int[], AudioDeviceAttributes, long, TimeUnit)}
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void cancelMuteAwaitConnection(@NonNull AudioDeviceAttributes device)
|
|
|
|
|
throws IllegalStateException {
|
|
|
|
|
Objects.requireNonNull(device);
|
|
|
|
|
@@ -8797,7 +8803,7 @@ public class AudioManager {
|
|
|
|
|
* @param callback the callback to register
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void registerMuteAwaitConnectionCallback(
|
|
|
|
|
@NonNull @CallbackExecutor Executor executor,
|
|
|
|
|
@NonNull MuteAwaitConnectionCallback callback) {
|
|
|
|
|
@@ -8821,7 +8827,7 @@ public class AudioManager {
|
|
|
|
|
* @param callback the callback to unregister
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void unregisterMuteAwaitConnectionCallback(
|
|
|
|
|
@NonNull MuteAwaitConnectionCallback callback) {
|
|
|
|
|
synchronized (mMuteAwaitConnectionListenerLock) {
|
|
|
|
|
@@ -8843,7 +8849,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void addAssistantServicesUids(@NonNull int[] assistantUids) {
|
|
|
|
|
try {
|
|
|
|
|
getService().addAssistantServicesUids(assistantUids);
|
|
|
|
|
@@ -8860,7 +8866,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void removeAssistantServicesUids(@NonNull int[] assistantUids) {
|
|
|
|
|
try {
|
|
|
|
|
getService().removeAssistantServicesUids(assistantUids);
|
|
|
|
|
@@ -8885,7 +8891,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public @NonNull int[] getAssistantServicesUids() {
|
|
|
|
|
try {
|
|
|
|
|
int[] uids = getService().getAssistantServicesUids();
|
|
|
|
|
@@ -8910,7 +8916,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void setActiveAssistantServiceUids(@NonNull int[] assistantUids) {
|
|
|
|
|
try {
|
|
|
|
|
getService().setActiveAssistantServiceUids(assistantUids);
|
|
|
|
|
@@ -8928,7 +8934,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public @NonNull int[] getActiveAssistantServicesUids() {
|
|
|
|
|
try {
|
|
|
|
|
int[] uids = getService().getActiveAssistantServiceUids();
|
|
|
|
|
@@ -9002,7 +9008,7 @@ public class AudioManager {
|
|
|
|
|
* @see #getPreferredMixerAttributes(AudioAttributes, AudioDeviceInfo)
|
|
|
|
|
* @see #clearPreferredMixerAttributes(AudioAttributes, AudioDeviceInfo)
|
|
|
|
|
*/
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS)
|
|
|
|
|
public boolean setPreferredMixerAttributes(@NonNull AudioAttributes attributes,
|
|
|
|
|
@NonNull AudioDeviceInfo device,
|
|
|
|
|
@NonNull AudioMixerAttributes mixerAttributes) {
|
|
|
|
|
@@ -9056,7 +9062,7 @@ public class AudioManager {
|
|
|
|
|
* @see #setPreferredMixerAttributes(AudioAttributes, AudioDeviceInfo, AudioMixerAttributes)
|
|
|
|
|
* @see #getPreferredMixerAttributes(AudioAttributes, AudioDeviceInfo)
|
|
|
|
|
*/
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS)
|
|
|
|
|
public boolean clearPreferredMixerAttributes(
|
|
|
|
|
@NonNull AudioAttributes attributes,
|
|
|
|
|
@NonNull AudioDeviceInfo device) {
|
|
|
|
|
@@ -9176,7 +9182,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public boolean supportsBluetoothVariableLatency() {
|
|
|
|
|
try {
|
|
|
|
|
return getService().supportsBluetoothVariableLatency();
|
|
|
|
|
@@ -9193,7 +9199,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public void setBluetoothVariableLatencyEnabled(boolean enabled) {
|
|
|
|
|
try {
|
|
|
|
|
getService().setBluetoothVariableLatencyEnabled(enabled);
|
|
|
|
|
@@ -9207,7 +9213,7 @@ public class AudioManager {
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
@SystemApi
|
|
|
|
|
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
@RequiresPermission(Manifest.permission.MODIFY_AUDIO_ROUTING)
|
|
|
|
|
public boolean isBluetoothVariableLatencyEnabled() {
|
|
|
|
|
try {
|
|
|
|
|
return getService().isBluetoothVariableLatencyEnabled();
|
|
|
|
|
|