2011年12月14日 星期三

SensorEventListener 感測器實作

要使用Android陀螺儀須先下載sensorsimulator-2.0-rc1
1.解壓縮到C:\sensorsimulator-2.0-rc1,
2.開啟資料夾「C:\sensorsimulator-2.0-rc1\bin」找到「sensorsimulator-2.0-rc1.jar
3.記得要先將模擬器打開
4.將資料夾「C:\sensorsimulator-2.0-rc1\bin」底下的「sensorsimulator-2.0-rc1.apk」複製到  
    I:\eclipse\android-sdk-windows\platform-tools 下
5.開啟cmd 指向你的eclipse磁碟機 打上cd eclipse\android-sdk-windows\platform-tools
6.接著 輸入adb install sensorsimulator-2.0-rc1.apk
7.出現「Success」表示安裝成功
8.到主目錄會出現

9.按「Testing」然後再按「Connect


.使用模擬器 / 取得感測器服務 / 與感測器連線 /建立onResume()onPause()
.implements SensorEventListener必須實作onAccuracyChangedonSensorChanged
. onResume()onPause()之間,在這個時期的Activity是在所有的Activity的前面,並且直接跟使用者進行互動,所以這段時期指的就是Activity is running 一個Activity能很頻繁的在resumepause這兩個狀態切換。所以在onResume()onPause()裡實作的程式應盡量精簡。
onCreate()是程式的初始化動作,onDestory()就是將onCreate()時所要來的資料做釋放的動作,onPause()將需要保存的資料進行保存,onResume()把保存的資料取回使用。

先在AndroidManifest.xml中設定權限
</application>
<!-- 新增INTERNET的權限 -->
  <uses-permission android:name="android.permission.INTERNET"/>

接著XML設定
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/xyz"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />


    <ImageView
        android:id="@+id/img"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/ic_launcher" />
</LinearLayout>
java主介面
package com.demo.android.SensorA;

//使用模擬器
import org.openintents.sensorsimulator.hardware.Sensor;
import org.openintents.sensorsimulator.hardware.SensorEvent;
import org.openintents.sensorsimulator.hardware.SensorEventListener;
import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;


import android.app.Activity;
import android.hardware.SensorManager;
/*在實機上
import java.util.List;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;*/
import android.os.Bundle;
import android.widget.ImageView;
//import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

//要使用感測器必須實作SensorEventListener介面
public class SensorAActivity extends Activity implements SensorEventListener {
    /** Called when the activity is first created. */
//private SensorManager sensorManager; //在實機上
private SensorManagerSimulator sensorManager; //使用模擬器
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //在實機上
        //取得感測器服務(Sensor service)
        //sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);//在實機上
        
        //使用模擬器
        //取得感測器服務(Sensor service)
        sensorManager = SensorManagerSimulator.getSystemService(this,SENSOR_SERVICE);
        //與感測模擬器連線
        sensorManager.connectSimulator();
    }
    
    @Override
    protected void onResume() {
    super.onResume();
   
    //註冊感應器
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
    }
    
    @Override
    protected void onPause() {
    super.onPause();
    //解除感應器註冊
   
    //在實機上
    //解除感應器註冊
    //sensorManager.unregisterListener(this);
   
    //使用模擬器
    //解除感應器註冊
    sensorManager.unregisterListener(this);
    //與感測模擬器斷線
    sensorManager.disconnectSimulator();
    }

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}

@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
//event:onSensorChanged傳入sensor的數值
float[] values = event.values;
//讀取感測器x軸,y軸,z軸的數值
String x = "X:" + String.valueOf(values[0])+"\n";
String y = "Y:" + String.valueOf(values[1])+"\n";
String z = "Z:" + String.valueOf(values[2])+"\n";
//顯示x軸,y軸,z軸在TextView上
TextView xyz=(TextView)findViewById(R.id.xyz);
xyz.setText(x+y+z);
ImageView img=(ImageView)findViewById(R.id.img);
//取得ImageView Layout的參數例如寬、高
LayoutParams params = (LayoutParams)img.getLayoutParams();
//利用X軸的數值設定imageview的寬、高,讓imageview放大縮小
params.width=(int)Math.abs(values[0])*20;
params.height=(int)Math.abs(values[0])*20;
//更新imageview的layout
img.setLayoutParams(params);
}
}












1 則留言:

  1. 妳好,我在

    資料夾C:\sensorsimulator-2.0-rc1\bin」底下
    並沒有看到sensorsimulator-2.0-rc1.apk
    只有SensorRecordFromDevice-2.0-rc1.apk
    sensorsimulator-2.0-rc1(jar)
    SensorSimulatorSettings-2.0-rc1.apk
    這三個

    回覆刪除