কম্পিউটার টিউটোরিয়াল

কোটলিন ব্যবহার করে অ্যান্ড্রয়েডে রিংগার মোড (সাইলেন্ট/ভাইব্রেট/নরমাল) ডিটেক্ট করা

ওভারভিউ

এই উদাহরণটি দেখায় কিভাবে 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_NORMAL2রিংটোন এবং নোটিফিকেশন শব্দে বাজে
RINGER_MODE_VIBRATE1শব্দ বন্ধ, শুধু ভাইব্রেট
RINGER_MODE_SILENT0সম্পূর্ণ নীরব (নো সাউন্ড, নো ভাইব্রেট)

রিংগার মোড পরিবর্তন শুনুন (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 চেক করুন।
  1. এন্ড্রয়েডে হোম কি চাপা শনাক্ত করার পদ্ধতি

  2. অ্যান্ড্রয়েডে ইউজার এজেন্ট টাইপ বা রিংগার মোড ডিটেক্ট করা

  3. Android-এ ৫ সেকেন্ড ব্যবহারকারীর নিষ্ক্রিয়তা শনাক্ত করা

  4. অ্যান্ড্রয়েডে কোটলিন ব্যবহার করে GridView স্ক্রোলিং নিষ্ক্রিয় করার উপায়