हां।
SensorEventListener.onSensorChanged(SensorEvent event)
का उपयोग करके आप एक्स & वाई अक्ष के साथ प्रदान किए गए मान निर्धारित कर सकते हैं। आपको इन मानों को रिकॉर्ड करने की आवश्यकता होगी और फिर उन्हें डेल्टा मान प्राप्त करने के लिए onSensorChanged
विधि पर आने वाली कॉल पर प्राप्त होने वाले किसी भी नए मान से तुलना करें। यदि एक धुरी पर डेल्टा मान सकारात्मक है तो डिवाइस एक तरफ बढ़ रहा है, अगर इसका नकारात्मक विपरीत विपरीत चल रहा है।
आपको शायद उस दर को ठीक करने की आवश्यकता होगी जिस पर आपको एक्सेलेरोमीटर घटनाएं मिलती हैं और थ्रेसहोल्ड जिस पर आप दिशा में परिवर्तन को इंगित करने के लिए डेल्टा मान मानते हैं।
यहाँ की एक त्वरित कोड उदाहरण है कि मैं क्या बारे में बात कर रहा हूँ:।
public class AccelerometerExample extends Activity implements SensorEventListener {
TextView textView;
StringBuilder builder = new StringBuilder();
float [] history = new float[2];
String [] direction = {"NONE","NONE"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = new TextView(this);
setContentView(textView);
SensorManager manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor accelerometer = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
manager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);
}
@Override
public void onSensorChanged(SensorEvent event) {
float xChange = history[0] - event.values[0];
float yChange = history[1] - event.values[1];
history[0] = event.values[0];
history[1] = event.values[1];
if (xChange > 2){
direction[0] = "LEFT";
}
else if (xChange < -2){
direction[0] = "RIGHT";
}
if (yChange > 2){
direction[1] = "DOWN";
}
else if (yChange < -2){
direction[1] = "UP";
}
builder.setLength(0);
builder.append("x: ");
builder.append(direction[0]);
builder.append(" y: ");
builder.append(direction[1]);
textView.setText(builder.toString());
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// nothing to do here
}
}
इस कोड को केवल एक्स और वाई अक्ष कि फोन में ले जाया गया है पर सामान्य दिशा प्रदान करेगा एक प्रदान करने के लिए दिशा का अधिक बढ़िया दृढ़ संकल्प (उदाहरण के लिए कंप्यूटर माउस के आंदोलन की नकल करने का प्रयास करने के लिए) आप पाते हैं कि एक फोन का एक्सेलेरोमीटर उद्देश्य के लिए उपयुक्त नहीं है।
इसका प्रयास करने के लिए, मैं पहले सेंसर विलंब को SensorManager.SENSOR_DELAY_FAST
पर सेट कर दूंगा और कई इतिहास घटनाओं की एक सूची तैयार करूंगा ताकि मैं समय के साथ आंदोलन का पता लगा सकूं और विपरीत दिशा में थोड़ी सी गति से प्रभावित न हो जो एक्सेलेरोमीटर लेते समय अक्सर होता है इस तरह के एक अच्छे स्तर पर माप। आपको अपनी टिप्पणियों में सुझाए गए आंदोलन के सटीक माप की गणना करने में मदद करने के लिए पारित समय की मात्रा को मापने की भी आवश्यकता होगी।
एक्सेलेरोमीटर के बारे में कुछ पोस्ट: http://www.anddev.org/advanced-tutorials-f21/accessing-the-accelerometer-t499.html#p1987 http://developer.android.com/reference/android/hardware /SensorEvent.html#values – Niko