所以我有下面的代碼,我無法去工作。我想讓一個類(AccelerometerReader)讀取我手機的加速度計的值,然後在另一個類(MyGame)中調用這些值,我使用它們在屏幕上打印這些值。代碼中的所有內容似乎都很好,除了我打印的所有值都只是0.0,並且不會更改外,我沒有得到任何值。我知道我的手機也有一個加速度計。任何幫助,將不勝感激!加速度計不改變值
感謝,歐文
AccelerometerReader類
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
public class AccelerometerReader extends Activity implements SensorEventListener{
private SensorManager sensorManager;
float ax,ay,az; // these are the acceleration in x, y and z axes
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
return;
if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
ax=event.values[0];
ay=event.values[1];
az=event.values[2];
}
}
public float getValueX() {
return ax;
}
public float getValueY() {
return ay;
}
public float getValueZ() {
return az;
}
}
內MyGame類
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
leftWall = new Rect(-100,0,0,canvas.getHeight());
rightWall = new Rect(canvas.getWidth(), 0, (canvas.getWidth() + 100), canvas.getHeight());
floor = new Rect(0,canvas.getHeight(),canvas.getWidth(),(canvas.getHeight() + 100));
ceiling = new Rect(0,-100,canvas.getWidth(),0);
AccelerometerReader acc = new AccelerometerReader();
float ax = acc.getValueX();
float ay = acc.getValueY();
float az = acc.getValueZ();
canvas.drawColor(Color.rgb(red,green,blue)); //0 or 51?, 51, 102
Rect player = new Rect(xPos,yPos,xPos+100,yPos+100);
Paint myPaint = new Paint();
myPaint.setColor(Color.rgb(0, 102, 255));
canvas.drawRect(player, myPaint);
myPaint.setColor(Color.rgb(0, 0, 0));
canvas.drawRect(xPos + 5, yPos + 5, xPos + 95, yPos +95, myPaint);
myPaint.setColor(Color.WHITE);
myPaint.setTextSize(20);
canvas.drawText("" + Math.round(ySpeed), 75, 50, myPaint);
canvas.drawText(ax +", "+ ay +", "+ az, 300, 50, myPaint);
if(gameStarted == false) {
myPaint.setTextSize(30);
myPaint.setTextAlign(Align.CENTER);
canvas.drawText("Touch screen to begin!", canvas.getWidth()/2, canvas.getHeight()/2, myPaint);
}
int r = Math.round(rand.nextInt(canvas.getHeight() - 150));
if(needsRand == true) {
blockY = r;
myPaint.setColor(Color.rgb(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255)));
}
//if(isAlive == true) {
Rect block = new Rect(blockX,blockY,(blockX+100),(blockY+100)); // left, top, right, bottom
myPaint.setColor(Color.WHITE);
canvas.drawRect(block, myPaint);
blockX--;
//}
if(player.intersect(leftWall)) {
xSpeed = Math.abs(xSpeed);
} else if(player.intersect(rightWall)) {
xSpeed = -(xSpeed);
} else if(player.intersect(floor)) {
yPos = canvas.getHeight() - 150;
ySpeed = -(ySpeed)*.75;
} else if(player.intersect(ceiling)) {
ySpeed = Math.abs(ySpeed);
} else if(player.intersect(block)) {
ySpeed = 0;
}
if(blockX <= -100) {
blockX = canvas.getWidth() + 100;
needsRand = true;
} else {
needsRand = false;
}
canvas.drawText("" + r, 300, 100, myPaint);
physics();
invalidate();
}
對不起,回覆一堆答案,我收到一些錯誤。首先,在上面的YourActivity中,我收到錯誤,「ServiceComputeFinal無法解析爲類型」,以及MyService.java中的MyBinder。我也想知道如何在我的MyGame類中使用它們,因爲它不是一個真正的活動。但是,我打開它使用另一個名爲MyGameActivity的活動,這是我應該綁定該服務?對於持續的問題感到抱歉,但我對所有這些東西都很陌生,而且我還沒有使用過服務。並感謝上面的代碼! – Owen2014
ServiceComputeFinal - > MyService。顯然忘了改變這個名字。至於活動:如果它綁定到服務並且有一個MyGame類的實例,則可以使用is將加速計數據推送到您的類。正如谷歌API所說,「注意:只有活動,服務和內容提供者才能綁定到服務」。總結:MyService <-> MyActivity <-> MyGame – PeterGriffin
它是怎麼回事? – PeterGriffin