Android code is crashing.
So I am making an android breakout game to get situated with java and the android API. I have very similar code to what they show on this webpage (SensorManager | Android Developers), but my code crashes. I do implement the class over in another file which is also attached. Can anyone point me in the direction as to why this is crashing? Is there some command I need to call first before I get a system service?
Code java:
package com.example.breakout;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
public class UpdateAccel extends Activity implements SensorEventListener
{
private boolean ENABLED = false;
private Sensor accel;
private SensorManager sm;
float aX = 0,aY = 0,aZ = 0;
public UpdateAccel()
{
sm = (SensorManager) getSystemService(SENSOR_SERVICE); //This line here crashes if I comment it out all runs well.
/*if(sm.getSensorList(Sensor.TYPE_ACCELEROMETER).size() == 0)
{
ENABLED = false; //no accelerometer installed!
}else
{
ENABLED = true; //accelerometer is installed!
accel = sm.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
if(!sm.registerListener(this, accel,SensorManager.SENSOR_DELAY_GAME))
{
ENABLED = false;
//something went wrong during registering.
}
}*/
}
public float getXacc()
{
if(!ENABLED)return 0;
return aX;
}
public float getYacc()
{
if(!ENABLED)return 0;
return aY;
}
public float getZacc()
{
if(!ENABLED)return 0;
return aZ;
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1)
{
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent arg0)
{
if(ENABLED)
{
aX = (float)(arg0.values[0]/9.8);
aY = (float)(arg0.values[1]/9.8);
aZ = (float)(arg0.values[2]/9.8);
if(aX < -1) aX = -1;
if(aY < -1) aY = -1;
if(aZ < -1) aZ = -1;
if(aX > 1) aX = 1;
if(aY > 1) aY = 1;
if(aZ > 1) aZ = 1;
}
}
}
Code java:
package com.example.breakout;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class GameView extends SurfaceView implements SurfaceHolder.Callback
{
private SpriteObject[] Bricks = new SpriteObject[10];
private SpriteObject Ball;
private SpriteObject Paddle;
private GameLogic mGameLogic;
UpdateAccel myAccel;
public GameView(Context context)
{
super(context);
getHolder().addCallback(this);
myAccel = new UpdateAccel();
for(int i = 0; i < 10; i++)
{
Bricks[i] = new SpriteObject(BitmapFactory.decodeResource(getResources(), R.drawable.redbrick), 10+i*20, 50);
}
Ball = new SpriteObject(BitmapFactory.decodeResource(getResources(), R.drawable.ball), 100, 100);
Ball.setMoveY(1);
Ball.setMoveX(1);
Paddle = new SpriteObject(BitmapFactory.decodeResource(getResources(), R.drawable.paddle), getWidth()/2, getHeight()/2);
mGameLogic = new GameLogic(getHolder(), this);
setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@SuppressWarnings("static-access")
@Override
public void surfaceCreated(SurfaceHolder holder) {
mGameLogic.setGameState(mGameLogic.RUNNING);
mGameLogic.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
public void onDraw(Canvas canvas)
{
canvas.drawColor(Color.BLACK);
for(int i = 0;i < 10;i++)
{
if(Bricks[i] != null)
{
Bricks[i].draw(canvas);
}
}
Paddle.draw(canvas);
Ball.draw(canvas);
}
public void update(int adj_mov)
{
//handles when ball hits side of the screen
if(Ball.getX() <= 5 && Ball.getMoveX() < 0)Ball.setMoveX(Ball.getMoveX() * -1);
if(Ball.getX() >= getWidth() - 5 && Ball.getMoveX() > 0)Ball.setMoveX(Ball.getMoveX() * -1);
if(Ball.getY() <= 5 && Ball.getMoveY() < 0)Ball.setMoveY(Ball.getMoveY() * -1);
//done with screen
//for testing bounces.
if(Ball.getY() >= getHeight() - 5 && Ball.getMoveY() > 0)Ball.setMoveY(Ball.getMoveY()*-1);
//end testing
Ball.update(adj_mov);
Paddle.setX((int)(getWidth()/2 + myAccel.getXacc()*(getWidth()/2)));
Paddle.setY(getHeight()-15);
}
}