如何通过音频管理器以编程方式将振动模式更改为铃声模式

7

我正在制作一款应用程序,用户如果发送了带有特定关键词的短信,则手机将从静音模式切换到响铃模式。该应用程序主要用于当用户在家中遗失手机,并且手机设置为静音模式时使用。

我的主要问题是如何通过音频管理器更改手机模式?

4个回答

8

使用 AudioManager 将 SILENT 模式设置为普通模式。

AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);   

switch (am.getRingerMode()) {   
    case AudioManager.RINGER_MODE_SILENT:   
        Log.i("MyApp","Silent mode");
        am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
        break;   
}  

2
AudioManager manager = (AudioManager) getContext().getSystemService(AUDIO_SERVICE);
manager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

& Vineet:感谢您的帮助,但是“getSystemService”未定义,请告诉我该怎么办? - Jasmeet Kaur Chauhan
getSystemServiceContext 类的一个方法。我编辑了我的回答。 - Gabriel Negut

2

试试这个:

AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

谢谢大家的帮助。但我实际上是从这里找到了解决方案:AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING); audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); audioManager.setStreamVolume(AudioManager.STREAM_RING, maxVolume, AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND); - Jasmeet Kaur Chauhan

0

为了让它适用于 Android 设备,包括 Marshmallow(API 23) 及以上版本

  1. AndroidManifest.xml 中定义 ACCESS_NOTIFICATION_POLICY 权限

    <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
    
  2. 在你的 onResume/onCreate 函数中,如果没有授权,请请求权限

    @Override
    protected void onResume() {
        super.onResume();
        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        //检查手机是否运行Marshmallow或更高版本
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M) {
            //如果未授权,则启动内置活动以授予权限
            if (!nm.isNotificationPolicyAccessGranted()) {
                startActivity(new Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS));
            }
        }
    }
    
  3. 最后,调用此方法来更改铃声模式

    public void setRingerMode(Context context,int mode){
            /*
            * mode变量值可以是:
            * AudioManager.RINGER_MODE_SILENT
            * AudioManager.RINGER_MODE_NORMAL
            * AudioManager.RINGER_MODE_VIBRATE
            */
            NotificationManager nm = (NotificationManager)context.getSystemService(NOTIFICATION_SERVICE);
            AudioManager audioManager = (AudioManager)context.getSystemService(AUDIO_SERVICE);
            if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M && nm.isNotificationPolicyAccessGranted())
                audioManager.setRingerMode(mode);
        }
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接