gpt4 book ai didi

android - 如何让 onActivityResult 在 Adob​​e Air 原生扩展中运行?

转载 作者:太空狗 更新时间:2023-10-29 16:23:23 25 4
gpt4 key购买 nike

我正在编写一个扩展,允许 Flex 应用程序访问 Android 的 native 图像选择器。我能够毫无问题地启动图像选择器 Activity ,但在它返回到调用者(一个 FREFunction 对象)之后,不会调用 onActivityResult。因此,我无法弄清楚用户选择了什么图像。

当我在原生 Android 应用程序中使用完全相同的 FREFunction 内容时,该应用程序运行良好,并且我能够在 onActivityResult 中检索所选图像的 URI。如何让 onActivityResult 触发,或者至少检索图像选择器 Activity 返回的信息?

最佳答案

另一个更简单的解决方案:

  • 在 ANE 扩展的本地 java 项目中,包括AIR 的 lib 文件夹 (AIR\lib\android\lib) 中的 runtimeClasses.jar,以及 FlashRuntimeExtension.jar。这使您可以访问AIR 的 AndroidActivityWrapper 类。

  • 由于runtimeClasses.jar中的一些接口(interface)被定义为protected,你需要让你的扩展可以访问它们。所以,在 com.adobe.air 包命名空间中创建两个接口(interface):


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
{
}
  • 您现在可以在我们的扩展中注册一些回调:

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;
}
}
}

关于android - 如何让 onActivityResult 在 Adob​​e Air 原生扩展中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8766698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com