Internal sructure. Where is MainActivity Class in Corona Native template?

Hello, please help me find out where is  MainActivity Class in Corona Native template.

I wanted to enable speechrecognition, but it gives me an erorr

No pending exception expected: java.lang.RuntimeException: SpeechRecognizer should be used only from the application’s main thread’

I thought it would be okey to run it in onLoaded method, just before main.lua starts but they say

it is not called on the main thread.

I tried to find any method that 

is called on the main thread

and failed to find any. 

Please, help me to move on.

private class CoronaRuntimeEventHandler implements com.ansca.corona.CoronaRuntimeListener {

/**

* Called after the Corona runtime has been created and just before executing the “main.lua” file.

* This is the application’s opportunity to register custom APIs into Lua.

* <p>

* Warning! This method is not called on the main thread.

* @param runtime Reference to the CoronaRuntime object that has just been loaded/initialized.

*                Provides a LuaState object that allows the application to extend the Lua API.

*/

@Override

public void onLoaded(com.ansca.corona.CoronaRuntime runtime) {

…SPEECH DOES NOT WORK HERE

}

Not a trivial case for me.

So far found 2 ways here

https://forums.coronalabs.com/topic/69480-sample-code-that-says-warning-this-method-is-not-called-on-the-main-ui-thread/

1) 

activity.runOnUiThread(new Runnable() {

    @Override
    public void run() {

    }
});

But i cannot get not null activity in onLoaded method

when i do here 

Activity activity = getActivity();

it is null

Maybe i will check other methods, but onLoaded seems to be the most right way

2) 

import com.ansca.corona.CoronaRuntime

CoronaEnvironment.getCoronaActivity().getRuntimeTaskDispatcher().send( new com.ansca.corona.CoronaRuntime() {
@Override
public void executeUsing(com.ansca.corona.CoronaRuntime runtime) {
// // This task’s execute() method will be called on the Corona runtime thread, just before rendering a frame.

Activity activity = getActivity();

if(activity == null)
{
Log.w(“HTTPD”, “!!! ZEO TIME NO ACTIVITY FOUND. GOT NULL”);
return;
}
android.content.Context mcontext = getApplicationContext(); // for NATIVE APPLICATION
Speech.init(mcontext, getPackageName());
}
} );

But here i got a tough answer

error: constructor CoronaRuntime in class CoronaRuntime cannot be applied to given types;

required: Context,boolean

found: no arguments

reason: actual and formal argument lists differ in length

Running it like this

CoronaEnvironment.getCoronaActivity().getRuntimeTaskDispatcher().send( new com.ansca.corona.CoronaRuntime( mcontext ) {

does not change anything

Finally got it working!!! 1st way

Got not null activity in onStarted and onLoaded method using

Activity activity = CoronaEnvironment.getCoronaActivity();

activity.runOnUiThread(new Runnable() {
@Override
public void run() {

… //MAIN THREAD HERE

}
});

But unfortunatly has no results on recognition yet :((( 

Not a trivial case for me.

So far found 2 ways here

https://forums.coronalabs.com/topic/69480-sample-code-that-says-warning-this-method-is-not-called-on-the-main-ui-thread/

1) 

activity.runOnUiThread(new Runnable() {

    @Override
    public void run() {

    }
});

But i cannot get not null activity in onLoaded method

when i do here 

Activity activity = getActivity();

it is null

Maybe i will check other methods, but onLoaded seems to be the most right way

2) 

import com.ansca.corona.CoronaRuntime

CoronaEnvironment.getCoronaActivity().getRuntimeTaskDispatcher().send( new com.ansca.corona.CoronaRuntime() {
@Override
public void executeUsing(com.ansca.corona.CoronaRuntime runtime) {
// // This task’s execute() method will be called on the Corona runtime thread, just before rendering a frame.

Activity activity = getActivity();

if(activity == null)
{
Log.w(“HTTPD”, “!!! ZEO TIME NO ACTIVITY FOUND. GOT NULL”);
return;
}
android.content.Context mcontext = getApplicationContext(); // for NATIVE APPLICATION
Speech.init(mcontext, getPackageName());
}
} );

But here i got a tough answer

error: constructor CoronaRuntime in class CoronaRuntime cannot be applied to given types;

required: Context,boolean

found: no arguments

reason: actual and formal argument lists differ in length

Running it like this

CoronaEnvironment.getCoronaActivity().getRuntimeTaskDispatcher().send( new com.ansca.corona.CoronaRuntime( mcontext ) {

does not change anything

Finally got it working!!! 1st way

Got not null activity in onStarted and onLoaded method using

Activity activity = CoronaEnvironment.getCoronaActivity();

activity.runOnUiThread(new Runnable() {
@Override
public void run() {

… //MAIN THREAD HERE

}
});

But unfortunatly has no results on recognition yet :(((