Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में ऑडियो/रिंगर मोड कैसे डिटेक्ट करें

AudioManager का उपयोग करके डिवाइस का रिंगर मोड (साइलेंट, वाइब्रेट, नॉर्मल) जांचना

एंड्रॉइड में AudioManager सिस्टम सर्विस के माध्यम से वर्तमान रिंगर मोड का पता लगाया जा सकता है। यह ऐप्स को यूजर की साउंड प्राथमिकताओं के अनुसार व्यवहार समायोजित करने की अनुमति देता है (जैसे: गेम में साउंड म्यूट करना यदि फोन साइलेंट मोड में है)।

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio में प्रोजेक्ट बनाएं।

चरण 2: लेआउट फ़ाइल

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:id="@+id/tvRingerMode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:textSize="24sp"
        android:textStyle="bold"
        tools:text="रिंगर मोड: सामान्य" />

    <Button
        android:id="@+id/btnCheckMode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tvRingerMode"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="24dp"
        android:onClick="checkRingerMode"
        android:text="रिंगर मोड जांचें" />

</RelativeLayout>

चरण 3: MainActivity में रिंगर मोड डिटेक्शन

package com.app.sample;

import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private TextView tvRingerMode;
    private AudioManager audioManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvRingerMode = findViewById(R.id.tvRingerMode);
        audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

        // प्रारंभिक जांच
        updateRingerModeDisplay();
    }

    public void checkRingerMode(View view) {
        updateRingerModeDisplay();
        Toast.makeText(this, "रिंगर मोड अपडेट किया गया", Toast.LENGTH_SHORT).show();
    }

    private void updateRingerModeDisplay() {
        if (audioManager == null) {
            tvRingerMode.setText("AudioManager उपलब्ध नहीं");
            return;
        }

        int ringerMode = audioManager.getRingerMode();
        String modeText;
        int color;

        switch (ringerMode) {
            case AudioManager.RINGER_MODE_SILENT:
                modeText = "रिंगर मोड: साइलेंट 🔕";
                color = 0xFFFF5722; // लाल/नारंगी
                break;
            case AudioManager.RINGER_MODE_VIBRATE:
                modeText = "रिंगर मोड: वाइब्रेट 📳";
                color = 0xFFFFC107; // एम्बर
                break;
            case AudioManager.RINGER_MODE_NORMAL:
                modeText = "रिंगर मोड: सामान्य 🔊";
                color = 0xFF4CAF50; // हरा
                break;
            default:
                modeText = "रिंगर मोड: अज्ञात (" + ringerMode + ")";
                color = 0xFF9E9E9E; // ग्रे
        }

        tvRingerMode.setText(modeText);
        tvRingerMode.setTextColor(color);
    }

    // रिंगर मोड बदलाव सुनने के लिए ब्रॉडकास्ट रिसीवर (वैकल्पिक)
    private final BroadcastReceiver ringerModeReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (AudioManager.RINGER_MODE_CHANGED_ACTION.equals(intent.getAction())) {
                updateRingerModeDisplay();
            }
        }
    };

    @Override
    protected void onResume() {
        super.onResume();
        // रिंगर मोड बदलाव के लिए रजिस्टर करें
        IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
        registerReceiver(ringerModeReceiver, filter);
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(ringerModeReceiver);
    }
}

रिंगर मोड कॉन्स्टेंट्स

कॉन्स्टेंटमानविवरण
RINGER_MODE_SILENT0पूरी तरह साइलेंट - कोई रिंग, कोई वाइब्रेशन
RINGER_MODE_VIBRATE1वाइब्रेट मोड - कॉल/नोटिफिकेशन पर वाइब्रेशन
RINGER_MODE_NORMAL2सामान्य - रिंगटोन बजती है

अतिरिक्त उपयोगी AudioManager मेथड्स

// वॉल्यूम स्तर प्राप्त करें (स्ट्रीम प्रकार के अनुसार)
int ringVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING);
int mediaVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
int alarmVolume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
int notificationVolume = audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION);

// अधिकतम वॉल्यूम
int maxRingVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING);

// वॉल्यूम सेट करें (यूजर अनुमति के साथ)
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, newVolume, 0);

// क्या स्ट्रीम म्यूट है?
boolean isMusicMute = audioManager.isStreamMute(AudioManager.STREAM_MUSIC);

// मोड सेट करें (कॉल के दौरान आदि)
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setMode(AudioManager.MODE_NORMAL);

Kotlin एक्सटेंशन

// AudioManager एक्सटेंशन
fun AudioManager.getRingerModeString(): String {
    return when (ringerMode) {
        RINGER_MODE_SILENT -> "साइलेंट"
        RINGER_MODE_VIBRATE -> "वाइब्रेट"
        RINGER_MODE_NORMAL -> "सामान्य"
        else -> "अज्ञात"
    }
}

fun AudioManager.isSilentOrVibrate(): Boolean {
    return ringerMode != RINGER_MODE_NORMAL
}

// उपयोग
val mode = audioManager.getRingerModeString()
if (audioManager.isSilentOrVibrate()) {
    // गेम साउंड म्यूट करें
}

चरण 4: AndroidManifest.xml

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.Light">

        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

नोट: शीर्षक में "User Agent" का उल्लेख है लेकिन कोड रिंगर मोड दिखाता है

मूल शीर्षक "How do detect Android user agent type in general" भ्रामक है। वास्तविक कोड AudioManager.getRingerMode() का उपयोग करता है जो रिंगर/साउंड मोड डिटेक्ट करता है, न कि यूजर एजेंट स्ट्रिंग।

यदि आपको यूजर एजेंट स्ट्रिंग (ब्राउज़र पहचान) चाहिए:

// WebView के लिए यूजर एजेंट
String userAgent = System.getProperty("http.agent");
// या WebView से
WebView webView = new WebView(this);
String ua = webView.getSettings().getUserAgentString();
नोट: एंड्रॉइड 9+ (API 28) में AudioManager.getRingerMode() के लिए MODIFY_AUDIO_SETTINGS अनुमति की आवश्यकता नहीं होती (केवल पढ़ने के लिए)। रिंगर मोड बदलने के लिए अनुमति चाहिए।
  1. एंड्रॉइड में गूगल मैप पर टच और उसकी स्थिति कैसे डिटेक्ट करें एंड्रॉइड में गूगल मैप पर टच और उसकी स्थिति कैसे डिटेक्ट करें

    Google Maps SDK में कैमरा चेंज लिस्टनर्स के माध्यम से मैप इंटरेक्शन डिटेक्ट करना Google Maps Android SDK सीधा ऑन मैप क्लिक लिस्टनर प्रदान नहीं करता (मार्कर क्लिक के अलावा)। इसके बजाय, OnCameraMoveStartedListener, OnCameraMoveListener, OnCameraIdleListener का उपयोग करके यूजर जेस्चर (पैन, जूम, टैप) डि

  1. Android में 5 सेकंड यूजर इनएक्टिविटी कैसे डिटेक्ट करें? Android में 5 सेकंड यूजर इनएक्टिविटी कैसे डिटेक्ट करें?

    यह उदाहरण दर्शाता है कि Handler और onUserInteraction() का उपयोग करके Android में यूजर इनएक्टिविटी (कोई टच/की इवेंट नहीं) को कैसे डिटेक्ट किया जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट XML res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-

  1. Android यूज़र को FaceTime कॉल कैसे करें Android यूज़र को FaceTime कॉल कैसे करें

    जब से यह आया है, FaceTime एक कट्टर Apple-ओनली प्लेटफॉर्म रहा है। इसका मतलब था कि यदि आप उन दोस्तों को कॉल करना चाहते थे जो Android या Windows-संचालित डिवाइस का उपयोग करते हैं, तो आपको Zoom, Skype या उपलब्ध अन्य वीडियो-कॉलिंग ऐप का उपयोग करना होगा। शुक्र है, iOS 15 की शुरुआत के साथ, Apple ने दुनिया क