至少在Pixel手机上,可以将手机从设置中静音。但是,从屏幕截图中可以看到,我没有找到任何Android API将手机设置为这种模式。 如果我通过
com.google.android.gms.internal.ads.zzgb
使用AudioManager
,则电话被设置为振动模式和/或显示“请勿打扰”图标。有人知道如何使用此功能吗?
答案 0 :(得分:3)
确保您已经在AndroidManifest.xml
文件中声明了以下权限。
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
编辑2
我还已经在 Google Pixel 2 API 28 上对其进行了测试,并且可以正常工作。
如您所见,通知栏中没有“请勿打扰(DND)”按钮。
编辑
audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0)
将使您实现所需的功能而没有“请勿打扰”图标。
输出
原始
AudioManger's方法名setRingerMode(int ringerMode)允许您设置所需的模式。
文档:
静音模式将使音量静音并且不会振动。震动模式 将使音量静音并振动。普通模式会发出声音,并可能 根据用户设置振动。
如果设备实现固定音量,则此方法无效 isVolumeFixed()指示的策略。
从N开始,振铃器模式调整将切换“请勿” 除非已授予该应用“请勿打扰”,否则不允许打扰 访问。参见NotificationManager#isNotificationPolicyAccessGranted()。
/**
* Changes mobile profile to "Silent" or "Vibrate" or "Normal" mode
*
* @param context
* @param mode - "0 - Silent"
* - "1 - Vibrate"
* - "2 - Normal"
*/
public static void chooseProfile(Context context, int ringerMode) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
if (ringerMode == 0)
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
else if (ringerMode == 1)
audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
else if (ringerMode == 2)
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
另请参见:
答案 1 :(得分:0)
AudioManager am = (AudioManager) getContext().getSystemService(AUDIO_SERVICE);
am.setRingerMode(AudioManager.RINGER_MODE_SILENT);
如果您想做相反的事情(通过切换使手机静音)而没有出现图标。在Android中,只有设置为0的“警报”和“媒体”音量实际上为0。呼叫音量永远不会为零,并且仍然可以听到振铃音量为0。可以将其设置为振动,并且当手机处于低功耗模式时,除非它是特权应用或用户允许的,否则振动功能不会激活,但是振动会使图标出现。将铃声音量设置为实际的0(无振动)具有使图标显示的效果。
它内置于Android源代码中,无法克服。具体来说,它是在HAL和SystemUI中进行处理的,这些策略的来源可以在https://android.googlesource.com/platform/hardware/libhardware/+/master/modules/audio/audio_hw.c
以及合适的https://android.googlesource.com/platform/hardware/libhardware/+/master/modules/audio/audio_policy.c
处在线找到,并带有图标显示https://android.googlesource.com/platform/frameworks/base/+/eb04a99/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
https://android.googlesource.com/platform/frameworks/base/+/eb04a99/packages/SystemUI/src/com/android/systemui/statusbar/policy/