Q:

Print GPU info (renderer, version, vendor) on TextView on Android

I searched the entire Internet for days now to find a solution and got nothing.  
I want to get the main info about the GPU on Android devices (like RENDERER, VENDOR and VERSION) and be able to print it on a textview on a defined XML layout.  I tryed a lot of methods and nothing worked for me.  Everybody says to use this:
Log.d("GL", "GL_RENDERER = " + gl.glGetString(GL10.GL_RENDERER));
Log.d("GL", "GL_VENDOR = " + gl.glGetString(GL10.GL_VENDOR));
Log.d("GL", "GL_VERSION = " + gl.glGetString(GL10.GL_VERSION));
Log.i("GL", "GL_EXTENSIONS = " + gl.glGetString(GL10.GL_EXTENSIONS));

I implemented the next class:
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mGLView = new GLSurfaceView(this);
    mGLView.setRenderer(new ClearRenderer());
    setContentView(mGLView);

}

private GLSurfaceView mGLView;
static class ClearRenderer implements GLSurfaceView. Renderer {

    public final static String renderer = null;
    Random aleatorio = new Random();

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        float r = aleatorio.nextFloat();
        float g = aleatorio.nextFloat();
        float b = aleatorio.nextFloat();
        gl.glClearColor(r, g, b, 1.0f);

        Log.d("GL", "GL_RENDERER = " + gl.glGetString(GL10.GL_RENDERER));
        Log.d("GL", "GL_VENDOR = " + gl.glGetString(GL10.GL_VENDOR));
        Log.d("GL", "GL_VERSION = " + gl.glGetString(GL10.GL_VERSION));
        Log.i("GL", "GL_EXTENSIONS = " + gl.glGetString(GL10.GL_EXTENSIONS));

    }

    public void onSurfaceChanged(GL10 gl, int w, int h) {           
    }

    public void onDrawFrame(GL10 gl) {
        gl.glClear(gl. GL_COLOR_BUFFER_BIT);         
    }
}
}

which works great but I have no idea how to put those logs into a textview.  Setting up the ContentView to my GLSurfaceView I don't know how to use a TextView in there. 
I aslo tryed using:
String renderer = gl.glGetString(GL10.GL_VENDOR);
Log.d("GL", renderer);

in the same place where previous Logs are, which also workg great and I can see the right value of the vendor in the LogCat. 
But still, I don't know how to pass this value to a textview (for example tv.setText(renderer)) and use it on a normal layout. 
I will appreciate a lot if someone could help me solve this problem with a simple example.  Take in considerations that I never used OpenGL and I only want to get that info about it.  I also accept if you tell me another way (easier if possible :D) to get that info. 
Thanks in advance.   

A:

It is bit tricky, you don't need to have GlSurfaceView as root , otherwise you will not have pre-defined TextView in layout. 
Solution:
This is how I manage to do, I have added GlSurfaceView in my pre-defined layout and then removed it when I'm done with the information. 
your xml file will be looking something like this with pre-defined TextView:
gpu_info.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rlRoot"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView 
    android:id="@+id/tvVendor"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#FF0000"
    />

and your Activity file will be looking like this:
public class GpuInfoActivity extends Activity{

private RelativeLayout rlRoot;
private TextView tvVendor;
private String mVendor;
private GLSurfaceView mGlSurfaceView;
private GLSurfaceView. Renderer mGlRenderer = new Renderer() {

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {// TODO Auto-generated method stub
        Log.d(TAG, "gl renderer: "+gl.glGetString(GL10.GL_RENDERER));
        Log.d(TAG, "gl vendor: "+gl.glGetString(GL10.GL_VENDOR));
        Log.d(TAG, "gl version: "+gl.glGetString(GL10.GL_VERSION));
        Log.d(TAG, "gl extensions: "+gl.glGetString(GL10.GL_EXTENSIONS));

        mVendor = gl.glGetString(GL10.GL_VENDOR);
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                tvVendor.setText(mVendor);
                rlRoot.removeView(mGlSurfaceView);

            }
        });}

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onDrawFrame(GL10 gl) {
        // TODO Auto-generated method stub

    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gpu_info);

    rlRoot = (RelativeLayout)findViewById(R.id.rlRoot);
    tvVendor = (TextView)findViewById(R.id.tvVendor);

    mGlSurfaceView = new GLSurfaceView(this);
    mGlSurfaceView.setRenderer(mGlRenderer);

    rlRoot.addView(mGlSurfaceView);

    }
}

I hope it will be helpful !! 

A:

Finally after struggling with this problem, I found a possible solution.  Maybe it is not the best but I had no other and it workd. 
I used shared preferences to store the info.  I created a launcher activity with the implemented GLSurfaceView with a delay of 3 seconds (more than enough to store all the strings) and after this delay the activity I need starts. 
The launcher activity looks like this:
package system.info.to.txt;

import java.util. Random;
import javax.microedition.khronos.egl. EGLConfig;
import javax.microedition.khronos.opengles. GL10;
import android.app. Activity;
import android.content. Context;
import android.content. Intent;
import android.content. SharedPreferences;
import android.opengl. GLSurfaceView;
import android.os. Bundle;
import android.os. CountDownTimer;
import android.util. Log;

public class RendererLoader extends Activity {

private static SharedPreferences prefs;
private static SharedPreferences. Editor editor;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    prefs = this.getSharedPreferences("GPUinfo", Context. MODE_PRIVATE);
    mGLView = new GLSurfaceView(this);
    mGLView.setRenderer(new ClearRenderer());
    setContentView(mGLView);    

    final Intent intent = new Intent(this, Info.class);
    new CountDownTimer(3000, 9999)
         {
           public void onTick(long millisUntilFinished) {
                     // Not used
           }
           public void onFinish() {             
           startActivity(intent);
           finish();
           }
        }.start();  
}

private GLSurfaceView mGLView;
class ClearRenderer implements GLSurfaceView. Renderer {

    Random aleatorio = new Random();

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        float r = aleatorio.nextFloat();
        float g = aleatorio.nextFloat();
        float b = aleatorio.nextFloat();
        gl.glClearColor(r, g, b, 1.0f);

        editor = prefs.edit();
        editor.putString("RENDERER", gl.glGetString(GL10.GL_RENDERER));
        editor.putString("VENDOR", gl.glGetString(GL10.GL_VENDOR));
        editor.putString("VERSION", gl.glGetString(GL10.GL_VERSION));
        editor.putString("EXTENSIONS", gl.glGetString(GL10.GL_EXTENSIONS));
        editor.commit();

    }

    public void onSurfaceChanged(GL10 gl, int w, int h) {

    }

    public void onDrawFrame(GL10 gl) {
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    }
  }
}

After that, you can retrieve the stored strings everywhere you want in your application using:
    SharedPreferences prefs =getSharedPreferences("GPUinfo",Context. MODE_PRIVATE);
    String vendor = prefs.getString("VENDOR", null);
    String renderer = prefs.getString("RENDERER", null);
    String version = prefs.getString("VERSION", null);
    String extensions = prefs.getString("EXTENSIONS", null);

I hope this answer will be useful for the people with the same problem.  Any other solution will be also helpful.