ওভারভিউ
এই উদাহরণটি দেখায় কিভাবে AudioManager ব্যবহার করে ডিভাইসের বর্তমান রিংগার মোড (সাইলেন্ট, ভাইব্রেট, নরমাল) প্রোগ্রাম্যাটিক্যালি বের করা যায়। নোট: আর্টিকেলের টাইটেলে "User Agent" লেখা আছে কিন্তু কোডে রিংগার মোড ডিটেক্ট করা হয়েছে।
পূর্বশর্ত
- অ্যান্ড্রয়েড স্টুডিও (কোটলিন)
- AudioManager পারমিশন (সিস্টেম সার্ভিস, এক্সট্রা পারমিশন লাগে না)
ধাপ ১: প্রজেক্ট তৈরি করুন
File → New Project → Empty Activity → Language: Kotlin।
ধাপ ২: লেআউট (res/layout/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>
ধাপ ৩: MainActivity.kt
package com.example.ringermodedetect
import android.content.Context
import android.media.AudioManager
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import java.util.Objects
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 (Objects.requireNonNull(audioManager).ringerMode) {
AudioManager.RINGER_MODE_SILENT -> {
Toast.makeText(this, "Silent Mode", Toast.LENGTH_SHORT).show()
}
AudioManager.RINGER_MODE_VIBRATE -> {
Toast.makeText(this, "Vibrate Mode", Toast.LENGTH_SHORT).show()
}
AudioManager.RINGER_MODE_NORMAL -> {
Toast.makeText(this, "Normal Mode", Toast.LENGTH_SHORT).show()
}
}
}
}
ধাপ ৪: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.ringermodedetect">
<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>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
চলান ও ফলাফল
অ্যাপ চালালে বর্তমান রিংগার মোড অনুযায়ী টোস্ট দেখাবে: "Silent Mode", "Vibrate Mode", বা "Normal Mode"।
AudioManager.RingerMode কনস্ট্যান্টসমূহ
| কনস্ট্যান্ট | মান | বিবরণ |
|---|---|---|
RINGER_MODE_NORMAL | 2 | রিংটোন এবং নোটিফিকেশন শব্দে বাজে |
RINGER_MODE_VIBRATE | 1 | শব্দ বন্ধ, শুধু ভাইব্রেট |
RINGER_MODE_SILENT | 0 | সম্পূর্ণ নীরব (নো সাউন্ড, নো ভাইব্রেট) |
রিংগার মোড পরিবর্তন শুনুন (Listener)
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val mode = intent.getIntExtra(AudioManager.EXTRA_RINGER_MODE, -1)
when (mode) {
AudioManager.RINGER_MODE_SILENT -> { /* সাইলেন্ট */ }
AudioManager.RINGER_MODE_VIBRATE -> { /* ভাইব্রেট */ }
AudioManager.RINGER_MODE_NORMAL -> { /* নরমাল */ }
}
}
}
// রেজিস্টার (onStart/onResume-এ)
registerReceiver(receiver, IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION))
// আনরেজিস্টার (onStop/onPause-এ)
unregisterReceiver(receiver)
ব্যবহারের ক্ষেত্র
- মিডিয়া অ্যাপ: সাইলেন্ট মোডে অটো পজ করুন।
- গেম: সাইলেন্ট মোডে গেম সাউন্ড মিউট করুন।
- নোটিফিকেশন ম্যানেজমেন্ট: ব্যবহারকারীর পছন্দ অনুযায়ী পুশ নোটিফিকেশন আচরণ পরিবর্তন।
সতর্কতা
- Android 11+ (API 30+) এ নন-সিস্টেম অ্যাপ রিংগার মোড পরিবর্তন করতে পারে না (শুধু পড়তে পারে)।
- Do Not Disturb (DND) মোড আলাদা কনসেপ্ট -
NotificationManager.isNotificationPolicyAccessGrantedচেক করুন।