[Android] Getting onActivityResult and onStart/onPause/.... events from AIR activity [solution]
Hi,
I struggled for a while with this issue and finally found a solution. I haven't seen it posted anywhere so I thought I would share it here.
- In ANE extension's native java project, we include runtimeClasses.jar from AIR's lib folder (AIR\lib\android\lib), along with FlashRuntimeExtension.jar. This gives us access to AIR's AndroidActivityWrapper class.
- Since some interfaces in runtimeClasses are defined as protected, we need to make them accessible to our extension. So we create two interfaces in com.adobe.air package namespace:
ActivityResultCallback.java
package com.adobe.air;
import com.adobe.air.AndroidActivityWrapper;
public abstract interface ActivityResultCallback extends AndroidActivityWrapper.ActivityResultCallback
{
}
StateChangeCallback.java
package com.adobe.air;
import com.adobe.air.AndroidActivityWrapper;
public abstract interface StateChangeCallback extends AndroidActivityWrapper.StateChangeCallback
{
}
- We can now register some callbacks in our extension:
ExtensionContext.java
package com.company.extension;
import java.util.HashMap;
import java.util.Map;
import android.content.Intent;
import android.content.res.Configuration;
import com.adobe.air.ActivityResultCallback;
import com.adobe.air.AndroidActivityWrapper;
import com.adobe.air.AndroidActivityWrapper.ActivityState;
import com.adobe.air.StateChangeCallback;
import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
public class ExtensionContext extends FREContext implements ActivityResultCallback, StateChangeCallback
{
private AndroidActivityWrapper aaw;
public ExtensionContext() {
aaw = AndroidActivityWrapper.GetAndroidActivityWrapper();
aaw.addActivityResultListener( this );
aaw.addActivityStateChangeListner( this );
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent ) {
}
@Override
public void onActivityStateChanged( ActivityState state ) {
switch ( state ) {
case STARTED:
case RESTARTED:
case RESUMED:
case PAUSED:
case STOPPED:
case DESTROYED:
}
}
@Override
public void onConfigurationChanged(Configuration paramConfiguration) {
}
@Override
public Map<String, FREFunction> getFunctions() {
Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>();
return functionMap;
}
@Override
public void dispose() {
if (aaw!=null) {
aaw.removeActivityResultListener( this );
aaw.removeActivityStateChangeListner( this );
aaw = null;
}
}
}
- I hope this helps anyone.
