我正在制作一款应用程序,用户如果发送了带有特定关键词的短信,则手机将从静音模式切换到响铃模式。该应用程序主要用于当用户在家中遗失手机,并且手机设置为静音模式时使用。
我的主要问题是如何通过音频管理器更改手机模式?
我正在制作一款应用程序,用户如果发送了带有特定关键词的短信,则手机将从静音模式切换到响铃模式。该应用程序主要用于当用户在家中遗失手机,并且手机设置为静音模式时使用。
我的主要问题是如何通过音频管理器更改手机模式?
使用 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;
}
AudioManager manager = (AudioManager) getContext().getSystemService(AUDIO_SERVICE);
manager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
试试这个:
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
audioManager.setStreamVolume(AudioManager.STREAM_RING, maxVolume, AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND);
- Jasmeet Kaur Chauhan为了让它适用于 Android 设备,包括 Marshmallow(API 23) 及以上版本
在 AndroidManifest.xml
中定义 ACCESS_NOTIFICATION_POLICY
权限
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
在你的 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));
}
}
}
最后,调用此方法来更改铃声模式
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);
}
getSystemService
是Context
类的一个方法。我编辑了我的回答。 - Gabriel Negut