Как мне получить onActivityResult для запуска в собственном расширении Adobe Air? - PullRequest
2 голосов
/ 07 января 2012

Я пишу расширение, которое позволит приложению Flex получать доступ к собственному средству выбора изображений Android.Я могу запустить операцию выбора изображения без проблем, но после того, как она возвращается к вызывающей стороне, которая является объектом FREFunction, onActivityResult не вызывается.Из-за этого я не могу понять, какое изображение выбрал пользователь.

Когда я использую точно такое же содержимое функции FREFunction в нативном приложении Android, приложение работает нормально, и я могу получить URI выбранного изображения в onActivityResult.Как я могу получить OnActivityResult для запуска или, по крайней мере, получить информацию, возвращаемую действием средства выбора изображений?

Ответы [ 2 ]

4 голосов
/ 10 марта 2014

Другое, более простое решение:

  • В собственный Java-проект расширения ANE включите runtimeClasses.jar из папки lib AIR ( AIR \ lib \ android\ lib ) вместе с FlashRuntimeExtension.jar .Это дает вам доступ к классу AIR AndroidActivityWrapper.

  • Поскольку некоторые интерфейсы в runtimeClasses.jar определены как защищенные, вам необходимо сделать их доступными для вашего расширения.Итак, создайте два интерфейса в пространстве имен пакета com.adobe.air:


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;
        }
    } 
}
2 голосов
/ 23 января 2012

Решение состоит в том, чтобы запустить действие из функции FREFunction, а затем использовать функцию onActivityResult этого действия для выполнения желаемых действий, для которых потребуются данные возвращаемого действия.

Оттуда вы можете использовать StatusEvent для отправки информации обратно в ваше приложение Flex.Убедитесь, что у вас есть прослушиватели для StatusEvent и соответствующие функции для обработки данных на основе метки события.

Примечание. Добавление дополнений к действию, которое должно запускать ваш onActivityResult, может привести к тому, что действие никогда не будет вызываться.Вместо этого создайте открытые статические поля в вашей функции FREFunction для вызова действия.

Кроме того, убедитесь, что контекст, используемый в действии, является FREContext, используемым обработчиком собственного расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...