में एक्सेलेरोमीटर का उपयोग करके सटीक रूप से आंदोलन का पता लगाएं, मैं कंपन (एक विशेष स्थिति पर) के साथ एक डेमो टिमर लागू कर रहा हूं, जब मैं अपना टाइमर शुरू करना शुरू करता हूं .. और जब मैं इसे स्टॉप बटन का उपयोग करके रोकता हूं, तो यह बस बंद हो जाता है।Android
अब जब मैं डिवाइस (टाइमर चल रहा है) को स्थानांतरित करता है, तो मुझे कार्यक्षमता को एकीकृत करना होगा, इसे टाइमर को रीसेट करना चाहिए। यह बहुत अच्छा काम कर रहा है, लेकिन एक्सेलेरोमीटर कार्यक्षमता बिल्कुल सटीक काम नहीं कर रही है। टाइमर को रीसेट करने के लिए इसे तेज झटका चाहिए।
मुझे इसके लिए एक अच्छा समाधान सुझाएं।
यहाँ मेरी कोड
public class SensorAccelerometer implements SensorEventListener {
private Context context;
private SensorManager sensorManager;
private Sensor accelerometer;
private TextView timelabel;
private Handler mHandler;
Runnable run;
private float mLastX, mLastY, mLastZ;
private final float NOISE = (float) 3.0;
public SensorAccelerometer(Context context) {
}
public SensorAccelerometer(Context context,TextView timelabel, Handler mHandler2, Runnable mUpdateTimeTask) {
// TODO Auto-generated constructor stub
this.context = context;
this.timelabel = timelabel;
this.mHandler = mHandler2;
this.run = mUpdateTimeTask;
initialiseSensor();
}
public void initialiseSensor(){
sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ALL);
sensorManager.registerListener(this, accelerometer,SensorManager.SENSOR_DELAY_NORMAL);
}
public void unregisterSensor(){
sensorManager.unregisterListener(this);
Toast.makeText(context, "Sensor Stopped..", Toast.LENGTH_SHORT).show();
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
mAccelLast=mAccelCurrent;
mAccelCurrent = FloatMath.sqrt(x*x + y*y + z*z);
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta;
if(mAccel>0.5){
TimerActivity.mStartTime = SystemClock.uptimeMillis();
mHandler.removeCallbacks(run);
mHandler.postDelayed(run, 100);
}
}
टाइमर गतिविधि
public class TimerActivity extends Activity {
public static long mStartTime = 0L;
private TextView mTimerLabel;
private Handler mHandler = new Handler();
String timerStop1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTimerLabel = (TextView) findViewById(R.id.textTimer);
Button timerStartButton = (Button) findViewById(R.id.btnTimer);
timerStartButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view){
if(mStartTime == 0L){
mStartTime = SystemClock.uptimeMillis();
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.postDelayed(mUpdateTimeTask, 100);
//activating the sensor and the acclerometer
SensorAccelerometer acc = new SensorAccelerometer(view.getContext(), mTimerLabel,mHandler,mUpdateTimeTask);
}
}
});
Button timerStopButton = (Button) findViewById(R.id.btnTimerStop);
timerStopButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view){
mHandler.removeCallbacks(mUpdateTimeTask);
mTimerLabel.setText(timerStop1);
mStartTime = 0L;
SensorAccelerometer scc = new SensorAccelerometer(view.getContext(),mTimerLabel,mHandler,mUpdateTimeTask);
scc.unregisterSensor();
}
});
}
private Runnable mUpdateTimeTask = new Runnable(){
public void run() {
final long start = mStartTime;
long millis = SystemClock.uptimeMillis()- start;
int seconds = (int) (millis/1000);
int minutes = seconds/60;
seconds = seconds % 60;
mTimerLabel.setText("" + minutes + ":"
+ String.format("%02d", seconds));
timerStop1 = minutes + ":"
+ String.format("%02d", seconds);
mHandler.postDelayed(this, 200);
}
};
protected void onPause() {
super.onPause();
SensorAccelerometer scc = new SensorAccelerometer(this,mTimerLabel,mHandler,mUpdateTimeTask);
scc.unregisterSensor();
};
}
मेरा सरल सवाल यह है कि झुकाव डेटा कैसे जांचें, (जब डिवाइस झुका हुआ हो) और मैं उस पर कोड का एक सेट करना चाहता हूं। क्या आपके पास उपरोक्त कोड के बारे में कोई समाधान है .. –
@stochastically। मेरा प्रश्न –
जैसा ही है, मैंने सोचा था कि आप गति का पता लगाने के लिए एक्सेलेरोमीटर डेटा का उपयोग करना चाहते थे। ऐसा करने के लिए, आपको डेटा को समझने की आवश्यकता है, इसलिए इसे लॉग करने की आवश्यकता है और इसे देखें। यदि आप सिर्फ यह जांचना चाहते हैं कि डिवाइस कब झुका हुआ है तो यह बहुत आसान है। उदाहरण के लिए, मेरे answser [link] देखें (http://stackoverflow.com/questions/16571798/android-device-angle-on-vertical-axis-while-device-stays-still/16572641#16572641)। पिच कोण शायद आप जो खोज रहे हैं। – Stochastically