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

Android बैकग्राउंड सर्विस में वॉल्यूम बटन लिस्टन करना

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 पर क्लिक करें। ऐप खोलकर वॉल्यूम बटन दबाएं - टोस्ट में "वॉल्यूम बढ़ाया गया/घटाया गया" दिखेगा।

  1. Android पर वॉल्यूम चेतावनी कैसे अक्षम करें Android पर वॉल्यूम चेतावनी कैसे अक्षम करें

    कई Android उपयोगकर्ता जानना चाहते हैं कि Android डिवाइसेज पर सुरक्षित वॉल्यूम चेतावनी को कैसे अक्षम किया जाए। जब आप अपने वॉल्यूम को अधिकतम करना चाहते हैं और एक निश्चित मात्रा से अधिक वॉल्यूम बढ़ाने के लिए एक डायलॉग स्वीकार करना पड़ता है तो यह कष्टप्रद हो सकता है। Android फोन ऐसा यूरोपियन कमेटी फॉर इ

  1. Android पर वॉल्यूम बटन कैसे ब्लॉक करें Android पर वॉल्यूम बटन कैसे ब्लॉक करें

    आप एक महत्वपूर्ण कॉल का उत्सुकता से इंतजार कर रहे हैं, लेकिन बहुत बाद में आपको पता चलता है कि आपकी रिंगर वॉल्यूम गलती से इतनी कम हो गई थी कि आप सुन नहीं पाए। Android डिवाइस पर वॉल्यूम को ऊपर और नीचे करना आसान है – कभी-कभी बहुत आसान। बस अपना फ़ोन उठाना या किसी और को इसे उधार देना वॉल्यूम बदल सकता है।

  1. त्वरित गाइड: बेहतर बैटरी प्रदर्शन के लिए Android पर Gear VR Service अक्षम करें त्वरित गाइड: बेहतर बैटरी प्रदर्शन के लिए Android पर Gear VR Service अक्षम करें

    यदि आप पुराने मॉडल का Samsung फोन उपयोग कर रहे हैं, तो आपने Samsung Gear VR Service पर ध्यान दिया होगा। Android पर Gear VR Service क्या है, इसका सरल उत्तर यह है कि यह एक ऐसी सेवा है जो आपको VR हेडसेट का उपयोग करने देती है। इस सेवा का उपयोग करने में जो समस्या होती है वह यह है कि यह भारी बैटरी पावर की