【问题标题】:Auto silent android N and later自动静音 android N 及更高版本
【发布时间】:2018-10-23 16:26:03
【问题描述】:

我正在构建一个 android 应用程序,我需要将用户的手机置于静音模式。我正在使用不同的方法,它在 android M(23 级)之前运行良好。 现在我们都知道android已经在android N及更高版本中更新了自动静音模式的政策,需要免打扰访问的特殊权限才能将手机置于静音模式。我对 android N 和更高版本的操作系统也做了同样的事情。但它仍然不能在 android N 及更高版本上运行。当我做这一切时,它不会给我任何错误,但它仍然无法正常工作。我附上下面的代码 sn-ps 看看并尝试找出问题所在。谢谢朋友。

我在其中授予“请勿打扰”应用程序访问权限的代码片段

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);
}

手机静音方法

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);
    }
}

【问题讨论】:

标签: java android android-permissions android-7.0-nougat silent-notification


【解决方案1】:

你的方法只适用于API

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE);

您是否在 Manifest 文件中添加了通知策略的权限?如果没有,那么添加这个,

<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />

您需要打开单独的Dialog以获得DND模式权限,您可以通过以下方式完成,

// 检查是否已为应用授予通知策略访问权限。

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 7 及更高版本上仍然面临同样的问题。
  • @RaQib 如果这对你不起作用,你可以试试这个 --> android--examples.blogspot.in/2017/08/…
  • 是的,它有效。条件有问题。现在它就像魅力一样工作。谢谢亲爱的支持!
  • 欢迎小伙伴,如果您觉得答案有帮助,请采纳答案以帮助其他人找到正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多