簡體   English   中英

如何以編程方式檢測 android 手機是否處於靜音模式

[英]how can I detect whether the android phone in Silent mode programmatically

如何判斷手機是否處於靜音模式?

我正在使用 Android 1.5。 我嘗試使用“android.provider.Settings.ACTION_SOUND_SETTINGS”。 它不工作。

使用AudioManagergetRingerMode()方法

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

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

以下代碼檢查手機是否未處於靜音模式,然后播放用kotlin編寫的嗶聲:

    val manager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
    manager.setStreamVolume(AudioManager.STREAM_MUSIC, 10, 0)
    val notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
    val player: MediaPlayer = MediaPlayer.create(applicationContext, notification)
    if(manager.ringerMode != AudioManager.RINGER_MODE_SILENT)
        player.start()

如果您想收聽鈴聲模式的變化意味着靜音振動正常的任何變化,您可以在您的活動中設置一個廣播接收器,如下所示。

   private val volumeKeyReceiver: VolumeKeyReceiver by lazy {
        VolumeKeyReceiver()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        registerBroadcastListener()
    }

    private fun registerBroadcastListener() {
        val intentFilter = IntentFilter()
        intentFilter.addAction("android.media.RINGER_MODE_CHANGED")
        registerReceiver(volumeKeyReceiver, intentFilter)
    }

並在活動被銷毀時取消注冊,如下所示。

 override fun onDestroy() {
        super.onDestroy()
        unregisterReceiver(volumeKeyReceiver)
    }

並在清單中注冊接收者

 <receiver android:name=".VolumeKeyReceiver"/>

這是廣播接收器

class VolumeKeyReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        //Implement Logic
        val audioManager =
            context?.getSystemService(Context.AUDIO_SERVICE) as android.media.AudioManager
        when (audioManager.ringerMode) {
            android.media.AudioManager.RINGER_MODE_SILENT -> Log.d(
                "VolumeKeyReceiver",
                "Silent mode"
            )
            android.media.AudioManager.RINGER_MODE_VIBRATE -> Log.d(
                "VolumeKeyReceiver",
                "Vibrate mode"
            )
            android.media.AudioManager.RINGER_MODE_NORMAL -> Log.d(
                "VolumeKeyReceiver",
                "Normal mode"
            )
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM