openGL活动 - 无法在未调用Looper.prepare()的线程内创建处理程序

时间:2015-03-13 12:25:29

标签: java android exception opengl-es

的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) {

    }

0 个答案:

没有答案