एंड्रॉइड में प्रॉक्सिमिटी (निकटता) सेंसर सपोर्ट जांचें
यह ट्यूटोरियल दिखाता है कि Sensor.TYPE_PROXIMITY का उपयोग करके कैसे जांचा जाए कि डिवाइस में प्रॉक्सिमिटी सेंसर है या नहीं। यह सेंसर कॉल के दौरान स्क्रीन बंद करने के लिए उपयोग होता है।
चरण 1: प्रोजेक्ट बनाएं
एंड्रॉइड स्टूडियो में नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="24dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/sensorStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="28sp"
android:textStyle="bold"
android:layout_marginTop="30dp"
android:padding="24dp"
android:background="#FCE4EC"
android:text="जांच हो रही है..."/>
</LinearLayout>
चरण 3: एक्टिविटी कोड (src/MainActivity.java)
package com.example.proximitycheck;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Build;
import android.os.Bundle;
import android.widget.TextView;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private TextView sensorStatus;
private SensorManager sensorManager;
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorStatus = findViewById(R.id.sensorStatus);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
checkProximitySupport();
}
private void checkProximitySupport() {
Sensor proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
if (proximitySensor != null) {
sensorStatus.setText("✓ प्रॉक्सिमिटी सेंसर सपोर्ट करता है");
sensorStatus.setTextColor(0xFF4CAF50);
String info = String.format(
"सेंसर: %s\nवेंडर: %s\nवर्जन: %d\nरेंज: %.1f cm\nरिजॉल्यूशन: %.3f cm\nपावर: %.3f mA\nन्यूनतम डिले: %d µs",
proximitySensor.getName(),
proximitySensor.getVendor(),
proximitySensor.getVersion(),
proximitySensor.getMaximumRange(),
proximitySensor.getResolution(),
proximitySensor.getPower(),
proximitySensor.getMinDelay()
);
sensorStatus.append("\n\n" + info);
} else {
sensorStatus.setText("✗ प्रॉक्सिमिटी सेंसर सपोर्ट नहीं करता");
sensorStatus.setTextColor(0xFFF44336);
}
}
}
प्रॉक्सिमिटी सेंसर विवरण
| विशेषता | विवरण |
|---|---|
| मापता है | वस्तु की दूरी (सेमी में) |
| सामान्य रेंज | 0 - 5 cm (कुछ 10+ cm तक) |
| आउटपुट | दूरी मान, या बाइनरी (निकट/दूर) |
| प्रकार | IR-आधारित (इन्फ्रारेड LED + फोटोडायोड) |
| मुख्य उपयोग | कॉल के दौरान स्क्रीन ऑफ, पॉकेट डिटेक्शन |
| रिपोर्टिंग मोड | ON_CHANGE (दूरी बदलने पर ही) |
प्रॉक्सिमिटी सेंसर डेटा पढ़ना
SensorEventListener proximityListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float distance = event.values[0]; // cm में
float maxRange = event.sensor.getMaximumRange();
boolean isNear = distance < maxRange; // आमतौर पर 0 = निकट, maxRange = दूर
// कुछ सेंसर: 0 = निकट, 5 = दूर (मैक्स रेंज)
runOnUiThread(() -> {
if (isNear) {
statusText.setText("📱 निकट: " + distance + " cm");
statusText.setBackgroundColor(0xFFFFEBEE);
} else {
statusText.setText("📱 दूर: " + distance + " cm");
statusText.setBackgroundColor(0xFFE8F5E9);
}
});
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
// रजिस्टर करें
sensorManager.registerListener(proximityListener,
sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),
SensorManager.SENSOR_DELAY_NORMAL);
सामान्य उपयोग केस
- कॉल स्क्रीन ऑफ: कान के निकट फोन → स्क्रीन ऑफ (बैटरी बचत, गलत टच रोकथाम)
- पॉकेट मोड: जेब में फोन → डबल टैप वेक डिसेबल, फिंगरप्रिंट डिसेबल
- जेस्चर कंट्रोल: हाथ लहराकर म्यूजिक कंट्रोल, कॉल उठाना
- ऑटो ब्राइटनेस: परिवेश प्रकाश + निकटता के साथ
महत्वपूर्ण नोट्स
- लगभग सभी स्मार्टफोन में प्रॉक्सिमिटी सेंसर होता है (कॉल कार्यक्षमता के लिए आवश्यक)
- टैबलेट्स में अक्सर नहीं होता
- कुछ आधुनिक फोन अल्ट्रासोनिक/ToF सेंसर उपयोग करते हैं (डिस्प्ले के नीचे)
- सेंसर मान 0.0 (निकट) और maxRange (दूर) के बीच होता है
- कुछ सेंसर केवल बाइनरी (0 या maxRange) रिपोर्ट करते हैं
चरण 4: टेस्ट करें
- वास्तविक डिवाइस पर चलाएं
- "सपोर्ट करता है" दिखना चाहिए
- हाथ/कान के निकट लाकर लाइव डेटा टेस्ट करें (अतिरिक्त कोड के साथ)
