的ErrorMessage: 无法在未调用Looper.prepare()
的线程内创建处理程序我正在创建一个使用openGL的游戏。我有一个主活动类,有3个可点击按钮,其中一个按钮将带您进入openGL活动。问题是,当我在我的设备上运行应用程序时,它会立即关闭。在我的openGL活动中,我正在实现SensorEventListener并使用加速度计。我已经查看了线程,但我仍然是他们的初学者,所以我无法修复我的代码。
主要
public class Main extends Activity {
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
public void PlayGame(View v) {
Runnable r = new Runnable() {
@Override
public void run() {
Looper.prepare();
synchronized (this) {
try {
Intent intent = new Intent(Main.this,OpenGLActivity.class);
startActivity(intent);
}catch(Exception e){
Log.e("main", "error");
}
}
handler.sendEmptyMessage(0);
Looper.loop();
}
};
Thread myThread = new Thread(r);
myThread.start();
}
OpenGLActivity
public class OpenGLActivity extends Activity implements SensorEventListener{
private Sensor mySensor;
private SensorManager mySensorManager;
private MyGLRenderer renderer;
private GLSurfaceView view;
float x, y;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x = y = 0;
// Get an instance of the SensorManager
mySensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
if(mySensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).size() != 0){
mySensor = mySensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
mySensorManager.registerListener(this, mySensor, SensorManager.SENSOR_DELAY_NORMAL);
}
//set app to full screen and keep screen on
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
renderer = new MyGLRenderer();
view = new GLSurfaceView(this);
view.setRenderer(renderer);
view.onResume();
setContentView(view);
}
@Override
protected void onResume() {
mySensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
// enables the sensor when the activity is resumed, ask for 10 ms updates.
mySensorManager.registerListener(this, mySensor, SensorManager.SENSOR_DELAY_NORMAL);
//if the focus to the game is restored then resume game
super.onResume();
view.onResume();
}
@Override
protected void onPause() {
// turn our sensor off when the activity is paused
mySensorManager.unregisterListener(this);
//if activity loses focus then pause the game
super.onPause();
view.onPause();
}
@Override
public void onSensorChanged(SensorEvent event) {
//checks the sensory event to ensure its to type im looking for
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
x = event.values[0];
y = event.values[1];
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}