如何打开系统声音以发出警报,或关闭系统静音。 (Android)

时间:2019-06-20 00:35:27

标签: java android

我正在构建一个需要警报的应用程序,如果用户已将其设备静音或将其设置为DND,我想知道如何覆盖它。

关于声音和通知系统的权限如何工作,它们在何处重叠等,我真的在明确细节上苦苦挣扎。我希望用户启用撤销其DND首选项的权利。

要明确。我可以打一个电话来覆盖设置的声音或通知设置吗?请在设备级别购买用户;如果有,我需要什么权限?

很抱歉这太笼统了,很了解它是否已被除名。

1 个答案:

答案 0 :(得分:0)

尝试:

private void playSound(Context context, int soundResId, int volFactor) {
    if (context != null) {
        try {
            MediaPlayer mediaPlayer = new MediaPlayer();
            AssetFileDescriptor assetFileDescriptor = context.getResources().openRawResourceFd(soundResId);
            if (assetFileDescriptor != null) {
                mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());
                assetFileDescriptor.close();
            }
            if (mediaPlayer != null) {
                mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        try {
                            mediaPlayer.reset();
                            mediaPlayer.release();
                        } catch (Exception e) {
                            e.printStackTrace();
                        } finally {
                            mp = null;
                        }
                    }
                });
                mediaPlayer.setOnErrorListener(new OnErrorListener() {
                    @Override
                    public boolean onError(MediaPlayer mp, int what, int extra) {
                        try {
                            mediaPlayer.reset();
                            mediaPlayer.release();
                        } catch (Exception e) {
                            e.printStackTrace();
                        } finally {
                            mp = null;
                        }
                        return true;
                    }
                });
                AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
                am.setStreamVolume(AudioManager.STREAM_ALARM, am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)/volFactor, 0);
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
                mediaPlayer.prepare();
                mediaPlayer.start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

也在清单中:

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