Android में ContentObserver का उपयोग करके वॉल्यूम बटन डिटेक्ट करना
यह उदाहरण दर्शाता है कि ContentObserver का उपयोग करके सिस्टम वॉल्यूम चेंज कैसे मॉनिटर करें, जिससे वॉल्यूम बटन प्रेस का पता चलता है, भले ही ऐप बैकग्राउंड में हो।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनें और प्रोजेक्ट बनाएं।
चरण 2: साधारण लेआउट
res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
android:padding="16sp"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="वॉल्यूम बढ़ाएं/घटाएं"
android:textSize="24sp"
android:textStyle="bold" />
</LinearLayout>
चरण 3: MainActivity.java - ContentObserver इम्प्लीमेंटेशन
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.database.ContentObserver;
import android.media.AudioManager;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;
import java.util.Objects;
public class MainActivity extends AppCompatActivity {
SettingsContentObserver settingsContentObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
settingsContentObserver = new SettingsContentObserver(this, new Handler());
getApplicationContext().getContentResolver().registerContentObserver(
android.provider.Settings.System.CONTENT_URI, true, settingsContentObserver);
}
public class SettingsContentObserver extends ContentObserver {
int previousVolume;
Context context;
SettingsContentObserver(Context c, Handler handler) {
super(handler);
context = c;
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
previousVolume = Objects.requireNonNull(audio).getStreamVolume(AudioManager.STREAM_MUSIC);
}
@Override
public boolean deliverSelfNotifications() {
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int currentVolume = Objects.requireNonNull(audio).getStreamVolume(AudioManager.STREAM_MUSIC);
int delta = previousVolume - currentVolume;
if (delta > 0) {
Toast.makeText(MainActivity.this, "वॉल्यूम घटाया गया", Toast.LENGTH_SHORT).show();
previousVolume = currentVolume;
} else if (delta < 0) {
Toast.makeText(MainActivity.this, "वॉल्यूम बढ़ाया गया", Toast.LENGTH_SHORT).show();
previousVolume = currentVolume;
}
}
}
@Override
protected void onDestroy() {
getApplicationContext().getContentResolver().unregisterContentObserver(settingsContentObserver);
super.onDestroy();
}
}
चरण 4: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<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>
कैसे काम करता है
ContentObserverसिस्टम सेटिंग्स URI में परिवर्तन देखता हैAudioManager.STREAM_MUSICमीडिया वॉल्यूम स्ट्रीम मॉनिटर करता हैonChange()में पिछले और वर्तमान वॉल्यूम की तुलना करके दिशा निर्धारित होती हैonDestroy()में ऑब्जर्वर अनरजिस्टर करना न भूलें
सीमाएं
- यह वास्तविक हार्डवेयर बटन नहीं, बल्कि वॉल्यूम चेंज डिटेक्ट करता है
- बैकग्राउंड में काम करने के लिए Service में मूव करें
- Android 10+ में कुछ प्रतिबंध लागू हो सकते हैं
ऐप चलाएं
डिवाइस कनेक्ट करें, Run पर क्लिक करें। ऐप खोलकर वॉल्यूम बटन दबाएं - टोस्ट में "वॉल्यूम बढ़ाया गया/घटाया गया" दिखेगा।