2013-03-27 18 views
-1

我想要一個示例項目來存儲android加速度計值的按鈕單擊它是工作,我得到的價值,現在我想存儲加速度計讀取從按鈕單擊開始並結束按鈕釋放,我一直在使用OnTouchListener試過,但我無法控制加速度計,任何一個之前想這一點,任何一種答案都將幫助全給我在一個按鈕獲取加速度計值

layout.setOnTouchListener(new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_DOWN) { 
      sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); 
      mAccelerometer = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
      sensorMgr.registerListener((SensorEventListener) getApplicationContext(), mAccelerometer,SensorManager.SENSOR_DELAY_FASTEST); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      sensorMgr.unregisterListener(this); 
     } 
     return true; 
    } 
}); 

這是我使用的代碼來控制加速度計,但我的應用程序去強制關閉給logcat錯誤是

03-27 12:36:29.570: I/TextToSpeech.java(28968): initTts() successfully bound to service 
03-27 12:36:29.578: D/SensorManager(28968): ====>>>>>Num Sensor: 1 
03-27 12:36:29.578: D/SensorManager(28968): ====>>>>>Num Sensor: 2 
03-27 12:36:29.578: D/SensorManager(28968): ====>>>>>Num Sensor: 3 
03-27 12:36:29.578: D/SensorManager(28968): ====>>>>>Num Sensor: 4 
03-27 12:36:29.578: D/SensorManager(28968): ====>>>>>Num Sensor: 5 
03-27 12:36:29.578: D/SensorManager(28968): ====>>>>>Num Sensor: 6 
03-27 12:36:29.578: D/SensorManager(28968): ====>>>>>Num Sensor: 7 
03-27 12:36:29.578: D/SensorManager(28968): ====>>>>>Num Sensor: 0 
03-27 12:36:30.570: W/dalvikvm(28968): threadid=1: thread exiting with uncaught exception (group=0x40015578) 
03-27 12:36:30.578: E/AndroidRuntime(28968): FATAL EXCEPTION: main 
03-27 12:36:30.578: E/AndroidRuntime(28968): java.lang.ClassCastException: android.app.Application 
03-27 12:36:30.578: E/AndroidRuntime(28968): at com.example.androidphonemotion.MainActivity$1.onTouch(MainActivity.java:59) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.view.View.dispatchTouchEvent(View.java:3934) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:903) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1733) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1151) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.app.Activity.dispatchTouchEvent(Activity.java:2096) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1717) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2215) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.view.ViewRoot.handleMessage(ViewRoot.java:1886) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.os.Looper.loop(Looper.java:130) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at android.app.ActivityThread.main(ActivityThread.java:3689) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at java.lang.reflect.Method.invokeNative(Native Method) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at java.lang.reflect.Method.invoke(Method.java:507) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
03-27 12:36:30.578: E/AndroidRuntime(28968): at dalvik.system.NativeStart.main(Native Method) 
+0

你想只讀一個值? – 2013-03-27 06:26:00

+0

我想讀取整個值,但是如果我得到的是最後一個運動值的那個值,那麼它會更有幫助 – user2020354 2013-03-27 06:29:44

+0

您還沒有註冊偵聽器,這就是爲什麼當您註銷時取消註冊 – 2013-03-27 06:54:56

回答

2

我會註冊和取消註冊傳感器聽衆按鈕點擊,存儲的值可以通過設置傳感器的onSensorChangedListener執行。

mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 

public void onSensorChanged(SensorEvent event) { 
    //perform storing values of event 
} 

另外,您可以在onResume()註冊和註銷onPause()。要開始/停止存儲數值,您可以在onTouch中設置一個標誌(如果您想在按住按鈕的同時進行記錄)或onClick(以第一個按鈕觸摸開始,第二個按鈕停止)。然後您必須在您的onSensorChanged(SensorEvent event)中放置另一個if-子句,以便在標誌爲true時僅存儲信息。這樣,您在註冊聽衆時就沒有問題,但電池消耗可能會更高,因爲只要應用程序運行,傳感器就一直處於活動狀態。

+0

感謝您的線程,並可以你能夠舉一些例子鏈接.. – user2020354 2013-03-27 06:30:35

+0

我添加了示例代碼。詢問有什麼不清楚的地方。 – 2013-03-27 06:31:35

+0

我在我的代碼中使用相同的東西,但我怎麼能控制使用按鈕,任何方式讓我試試,我生病讓你回來.. – user2020354 2013-03-27 06:33:02