Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Phát hiện chế độ âm thanh (Ringer Mode) Android Kotlin

Hướng dẫn này minh họa cách phát hiện chế độ âm thanh (Ringer Mode: Silent, Vibrate, Normal) trên Android sử dụng Kotlin.

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Thiết kế giao diện (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="Tutorials Point"
        android:textAlignment="center"
        android:textColor="@android:color/holo_green_dark"
        android:textSize="32sp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Detect Android ringer mode"
        android:textAlignment="center"
        android:textColor="@android:color/holo_red_dark"
        android:textSize="24sp"
        android:textStyle="bold" />

</RelativeLayout>

Bước 3: Viết code MainActivity.kt

import android.content.Context
import android.media.AudioManager
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import java.util.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
        when (audioManager.ringerMode) {
            AudioManager.RINGER_MODE_SILENT -> Toast.makeText(
                this, "Chế độ Im lặng (Silent)", Toast.LENGTH_SHORT
            ).show()
            AudioManager.RINGER_MODE_VIBRATE -> Toast.makeText(
                this, "Chế độ Rung (Vibrate)", Toast.LENGTH_SHORT
            ).show()
            AudioManager.RINGER_MODE_NORMAL -> Toast.makeText(
                this, "Chế độ Bình thường (Normal)", Toast.LENGTH_SHORT
            ).show()
        }
    }
}

Bước 4: Cấu hình AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.q11">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                
                
            </intent-filter>
        </activity>

    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. App sẽ hiển thị Toast báo chế độ âm thanh hiện tại: Silent, Vibrate hoặc Normal.

Giải thích AudioManager.RingerMode

Hằng sốGiá trịMô tả
RINGER_MODE_SILENT0Im lặng hoàn toàn, không rung
RINGER_MODE_VIBRATE1Rung, không phát âm thanh
RINGER_MODE_NORMAL2Phát âm thanh bình thường

Lắng nghe thay đổi chế độ (BroadcastReceiver)

// Register trong onCreate/onResume
val filter = IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION)
registerReceiver(ringerModeReceiver, filter)

// Unregister trong onPause/onDestroy
unregisterReceiver(ringerModeReceiver)

private val ringerModeReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
        when (audioManager.ringerMode) {
            AudioManager.RINGER_MODE_SILENT -> Log.d("Ringer", "Silent")
            AudioManager.RINGER_MODE_VIBRATE -> Log.d("Ringer", "Vibrate")
            AudioManager.RINGER_MODE_NORMAL -> Log.d("Ringer", "Normal")
        }
    }
}

Đổi chế độ âm thanh theo chương trình

audioManager.ringerMode = AudioManager.RINGER_MODE_SILENT
audioManager.ringerMode = AudioManager.RINGER_MODE_VIBRATE
audioManager.ringerMode = AudioManager.RINGER_MODE_NORMAL
Lưu ý: Từ Android 9 (API 28), cần quyền MODIFY_AUDIO_SETTINGS để thay đổi ringer mode. Từ Android 12 (API 31), policy nghiêm ngặt hơn.

Kiểm tra Do Not Disturb (DND) - API 24+

val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    val isDnd = notificationManager.currentInterruptionFilter == NotificationManager.INTERRUPTION_FILTER_NONE
    // isDnd = true khi bật "Không làm phiền"
}