एंड्रॉइड में मैग्नेटिक फील्ड सेंसर (मैग्नेटोमीटर) सपोर्ट जांचें
यह ट्यूटोरियल Sensor.TYPE_MAGNETIC_FIELD का उपयोग करके मैग्नेटिक फील्ड सेंसर की उपलब्धता जांचने का तरीका दिखाता है। यह लेख 1005061212 के समान है लेकिन अलग ID के साथ।
चरण 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="#E3F2FD"
android:text="जांच हो रही है..."/>
</LinearLayout>
चरण 3: एक्टिविटी कोड (src/MainActivity.java)
package com.example.magneticfieldcheck;
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);
checkMagneticFieldSupport();
}
private void checkMagneticFieldSupport() {
Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
if (magneticSensor != null) {
sensorStatus.setText("✓ मैग्नेटिक फील्ड सेंसर सपोर्ट करता है");
sensorStatus.setTextColor(0xFF4CAF50);
String info = String.format(
"सेंसर: %s\nवेंडर: %s\nवर्जन: %d\nअधिकतम रेंज: %.1f µT\nरिजॉल्यूशन: %.3f µT\nपावर: %.3f mA\nन्यूनतम डिले: %d µs",
magneticSensor.getName(),
magneticSensor.getVendor(),
magneticSensor.getVersion(),
magneticSensor.getMaximumRange(),
magneticSensor.getResolution(),
magneticSensor.getPower(),
magneticSensor.getMinDelay()
);
sensorStatus.append("\n\n" + info);
} else {
sensorStatus.setText("✗ मैग्नेटिक फील्ड सेंसर सपोर्ट नहीं करता");
sensorStatus.setTextColor(0xFFF44336);
}
}
}
मैग्नेटिक फील्ड सेंसर डेटा पढ़ना
SensorEventListener magneticListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// event.values[0] = X-अक्ष µT में
// event.values[1] = Y-अक्ष µT में
// event.values[2] = Z-अक्ष µT में
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
// कुल चुंबकीय क्षेत्र तीव्रता
float magnitude = (float) Math.sqrt(x*x + y*y + z*z);
// अजीमथ (कम्पास हेडिंग) - एक्सेलेरोमीटर के साथ संयुक्त
// इसके लिए SensorManager.getOrientation() की आवश्यकता होती है
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// सटीकता बदलने पर: SENSOR_STATUS_UNRELIABLE, ACCURACY_LOW, MEDIUM, HIGH
}
};
// रजिस्टर करें
sensorManager.registerListener(magneticListener,
sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_UI);
कम्पास कार्यान्वयन के लिए (बोनस)
// कम्पास के लिए एक्सेलेरोमीटर + मैग्नेटोमीटर दोनों चाहिए
float[] gravity = new float[3];
float[] geomagnetic = new float[3];
float[] rotationMatrix = new float[9];
float[] orientation = new float[3];
// SensorEventListener में दोनों सेंसर्स के डेटा स्टोर करें
// फिर:
if (SensorManager.getRotationMatrix(rotationMatrix, null, gravity, geomagnetic)) {
SensorManager.getOrientation(rotationMatrix, orientation);
float azimuth = orientation[0]; // रेडियन में, उत्तर से पूर्व की ओर
float degrees = (float) Math.toDegrees(azimuth);
if (degrees < 0) degrees += 360;
}
चरण 4: टेस्ट करें
- वास्तविक डिवाइस पर चलाएं
- लगभग सभी आधुनिक स्मार्टफोन में मैग्नेटोमीटर होता है
- सेंसर डिटेल्स के साथ "सपोर्ट करता है" दिखना चाहिए
