我正在尝试将振铃器设置为静音且请勿打扰优先级仅使用以下
AudioManager myAudioMgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
NotificationManager myNOtificationMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
myAudioMgr.setRingerMode(AudioManager.RINGER_MODE_SILENT);
myNOtificationMgr.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY);
我一直收到安全错误
java.lang.RuntimeException:无法启动接收器MyBroadcastReceiver:java.lang.SecurityException:通知策略访问被拒绝
我已将访问通知政策权限添加到我的清单文件
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
我错过了额外的许可吗?
答案 0 :(得分:2)
似乎用户需要通过设置屏幕明确授予应用程序权限,以便应用程序通过通知api操纵优先级/静默。我假设您正在使用notificationManager类。一些可能对您有帮助的链接:
我认为您基本上需要做的是将用户引导至“显示请勿打扰访问设置”并让他启用通知管理选项(例如,您可以为模拟位置做些类似的事情)
示例代码:
startActivityForResult(new Intent(android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS), 0);
希望这有帮助。
答案 1 :(得分:0)
来自Android开发者:
通过将用户发送到匹配的活动来请求策略访问权限 系统意图行动ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS。
使用ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED收听 用户授予或拒绝此访问权限。
因此,要获得权限,您应该通过将用户发送到与系统意图操作ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS匹配的活动来请求策略访问,并使用BroadcastReceiver侦听响应,并执行操作ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED。
另请参阅NotificationManager中的方法isNotificationPolicyAccessGranted()以检查是否授予了权限。
答案 2 :(得分:0)
要更正java.lang.SecurityException: Access denied to process: 3454
错误,必须将android.permission.SET_WALLPAPER
权限添加到Android清单中。
在AndroidManifest.xml
中添加以下行:
uses-permission android:name="android.permission.SET_WALLPAPER"
答案 3 :(得分:-3)
您需要执行类似
的操作public class SomeFragment extends FragmentCompat {
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
int permissionNotifications = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission. ACCESS_NOTIFICATION_POLICY);
if (permissionNotifications != PackageManager.PERMISSION_GRANTED ) {
ActivityCompat.requestPermissions(
getActivity(),
new String[] { Manifest.permission.ACCESS_NOTIFICATION_POLICY },
PERMISSION_REQUEST
);
}
}
}
请注意,我无法运行此代码,因此可能需要一些TLC,但这只是一个开始