自动静音 android N 及更高版本
Auto silent android N and later
我正在构建一个 android 应用程序,我需要将用户的 phone 置于静音模式。我正在使用不同的方法,它在 android M(23 级)之前工作得很好。
现在我们都知道 android 已在 android N 及更高版本中更新了自动静音模式的策略,并且需要“请勿打扰访问”的特殊许可才能将 phone 置于静音模式。我也为 android N 和后来的 OS 版本做了同样的事情。但它还没有在 android N 和更高版本上工作。当我做这一切时,它不会给我任何错误,但它仍然无法正常工作。我附上下面的代码片段,看看并尝试找出问题所在。谢谢小伙伴们。
代码段,其中我提供了“请勿打扰”应用访问权限
public void onRingerPermissionsClicked(View view) {
Intent intent = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
}
startActivity(intent);
}
将phone设置为静音的方法
setRingerMode(context, AudioManager.RINGER_MODE_SILENT);
方法setRingerMode()
private void setRingerMode(Context context, int mode) {
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
// Check for DND permissions for API 24+
if (android.os.Build.VERSION.SDK_INT < 24 ||
(android.os.Build.VERSION.SDK_INT >= 24 && !nm.isNotificationPolicyAccessGranted())) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(mode);
}
}
您的方法只适用于 API<23,在 API23 之后您需要使用通知管理器将手机 phone 放在 "DND mode" 上,方法如下做吧。
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE);
你有没有在Manifest文件中添加通知政策的权限??如果没有,那么添加这个,
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
您需要打开单独的对话框以获取免打扰模式权限,您可以按照以下步骤进行操作,
// 检查是否已为应用授予通知策略访问权限。
NotificationManager mNotificationManager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
if (!mNotificationManager.isNotificationPolicyAccessGranted()) {
Intent intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
startActivity(intent);
}
我正在构建一个 android 应用程序,我需要将用户的 phone 置于静音模式。我正在使用不同的方法,它在 android M(23 级)之前工作得很好。 现在我们都知道 android 已在 android N 及更高版本中更新了自动静音模式的策略,并且需要“请勿打扰访问”的特殊许可才能将 phone 置于静音模式。我也为 android N 和后来的 OS 版本做了同样的事情。但它还没有在 android N 和更高版本上工作。当我做这一切时,它不会给我任何错误,但它仍然无法正常工作。我附上下面的代码片段,看看并尝试找出问题所在。谢谢小伙伴们。
代码段,其中我提供了“请勿打扰”应用访问权限
public void onRingerPermissionsClicked(View view) {
Intent intent = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
}
startActivity(intent);
}
将phone设置为静音的方法
setRingerMode(context, AudioManager.RINGER_MODE_SILENT);
方法setRingerMode()
private void setRingerMode(Context context, int mode) {
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
// Check for DND permissions for API 24+
if (android.os.Build.VERSION.SDK_INT < 24 ||
(android.os.Build.VERSION.SDK_INT >= 24 && !nm.isNotificationPolicyAccessGranted())) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(mode);
}
}
您的方法只适用于 API<23,在 API23 之后您需要使用通知管理器将手机 phone 放在 "DND mode" 上,方法如下做吧。
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE);
你有没有在Manifest文件中添加通知政策的权限??如果没有,那么添加这个,
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
您需要打开单独的对话框以获取免打扰模式权限,您可以按照以下步骤进行操作,
// 检查是否已为应用授予通知策略访问权限。
NotificationManager mNotificationManager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
if (!mNotificationManager.isNotificationPolicyAccessGranted()) {
Intent intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
startActivity(intent);
}