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_SILENT | 0 | पूरी तरह साइलेंट - कोई रिंग, कोई वाइब्रेशन |
RINGER_MODE_VIBRATE | 1 | वाइब्रेट मोड - कॉल/नोटिफिकेशन पर वाइब्रेशन |
RINGER_MODE_NORMAL | 2 | सामान्य - रिंगटोन बजती है |
अतिरिक्त उपयोगी 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अनुमति की आवश्यकता नहीं होती (केवल पढ़ने के लिए)। रिंगर मोड बदलने के लिए अनुमति चाहिए।