एंड्रॉइड में गेम रोटेशन वेक्टर सेंसर सपोर्ट जांचें
यह ट्यूटोरियल दिखाता है कि Sensor.TYPE_GAME_ROTATION_VECTOR की उपलब्धता कैसे जांचें। यह सेंसर मैग्नेटोमीटर के बिना ओरिएंटेशन प्रदान करता है (गेमिंग के लिए आदर्श)।
चरण 1: प्रोजेक्ट बनाएं
एंड्रॉइड स्टूडियो में नया प्रोजेक्ट बनाएं (API 18+ अनुशंसित)।
चरण 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="24sp"
android:textStyle="bold"
android:layout_marginTop="30dp"
android:padding="24dp"
android:background="#FFF3E0"
android:text="जांच हो रही है..."/>
</LinearLayout>
चरण 3: एक्टिविटी कोड (src/MainActivity.java)
package com.example.gamerotationcheck;
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);
checkGameRotationVectorSupport();
}
private void checkGameRotationVectorSupport() {
// API 18 (Android 4.3) में जोड़ा गया
Sensor gameRotationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR);
if (gameRotationSensor != null) {
sensorStatus.setText("✓ गेम रोटेशन वेक्टर सपोर्ट करता है");
sensorStatus.setTextColor(0xFF4CAF50);
String info = String.format(
"सेंसर: %s\nवेंडर: %s\nवर्जन: %d\nरेंज: %.1f\nरिजॉल्यूशन: %.3f\nपावर: %.3f mA",
gameRotationSensor.getName(),
gameRotationSensor.getVendor(),
gameRotationSensor.getVersion(),
gameRotationSensor.getMaximumRange(),
gameRotationSensor.getResolution(),
gameRotationSensor.getPower()
);
sensorStatus.append("\n\n" + info);
} else {
sensorStatus.setText("✗ गेम रोटेशन वेक्टर सपोर्ट नहीं करता");
sensorStatus.setTextColor(0xFFF44336);
}
}
}
गेम रोटेशन वेक्टर vs रोटेशन वेक्टर
| विशेषता | TYPE_ROTATION_VECTOR | TYPE_GAME_ROTATION_VECTOR |
|---|---|---|
| मैग्नेटोमीटर उपयोग | हां (उत्तर खोजने के लिए) | नहीं (केवल जायरो + एक्सेलेरोमीटर) |
| ड्रिफ्ट | कम (मैग्नेटोमीटर से करेक्शन) | अधिक (समय के साथ यॉ ड्रिफ्ट) |
| रिस्पॉन्सनेस | थोड़ा धीमा | तेज, कम विलंबता |
| उपयोग | नेविगेशन, कम्पास, AR | गेमिंग, VR, सापेक्ष रोटेशन |
| उपलब्धता | API 9+ | API 18+ |
गेम रोटेशन वेक्टर डेटा (क्वाटर्नियन)
SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// event.values में क्वाटर्नियन घटक:
// values[0] = x*sin(θ/2)
// values[1] = y*sin(θ/2)
// values[2] = z*sin(θ/2)
// values[3] = cos(θ/2) (स्केलर भाग)
// values[4] = अनुमानित हेडिंग सटीकता (रेडियन में, वैकल्पिक)
float[] quaternion = new float[4];
System.arraycopy(event.values, 0, quaternion, 0, 4);
// रोटेशन मैट्रिक्स में कनवर्ट करें
float[] rotationMatrix = new float[9];
SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values);
// ऑयलर एंगल्स प्राप्त करें
float[] orientation = new float[3];
SensorManager.getOrientation(rotationMatrix, orientation);
// orientation[0] = अजीमथ (यॉ)
// orientation[1] = पिच
// orientation[2] = रोल
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
गेमिंग में उपयोग
- कैमरा कंट्रोल: फर्स्ट-पर्सन लुक अराउंड
- स्टीयरिंग: रेसिंग गेम्स में फोन झुकाकर
- VR: हेड ट्रैकिंग (मैग्नेटोमीटर ड्रिफ्ट के बिना)
- जेस्चर: क्विक रोटेशन जेस्चर्स पहचानें
चरण 4: टेस्ट करें
- वास्तविक डिवाइस पर चलाएं (API 18+)
- अधिकांश आधुनिक फोन सपोर्ट करते हैं (सॉफ्टवेयर फ्यूजन के माध्यम से)
- बजट/पुराने डिवाइसेज में नहीं हो सकता
