WeakPtr was not the solution you were right the events inside bp all become Unbound after sometime
UCLASS()
class ANDROIDFILESYSTEM_API UAndroidFileSystemBlueprint : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UAndroidFileSystemBlueprint (const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) {};
private:
static UCallback* DelegateObj;
};
Theses are the java callback functions
#if PLATFORM_ANDROID
JNI_METHOD void Java_com_epicgames_unreal_GameActivity_OnFilePickerResult(JNIEnv* env, jclass clazz, jobjectArray result)
{
TArray<FString> Result = JavaConvert::ConvertToStringArray(result);
TArray<FString>* ResultPathPtr = new TArray<FString>(Result);
AsyncTask(ENamedThreads::GameThread, [ResultPathPtr] ()
{
TWeakObjectPtr<UCallback> WeakCallback = DelegateObj;
if (WeakCallback.IsValid())
{
UCallback* CallbackObj = WeakCallback.Get();
if (IsValid(CallbackObj))
{
if (CallbackObj->GetFilePickerResultDelegate().IsBound())
{
CallbackObj->GetFilePickerResultDelegate().Broadcast(ResultPathPtr);
}
}
}
delete ResultPathPtr;
});
}
#endif
This is the class that has all delegates
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOneParamDelegate, const TArray<FString>, Path);
UCLASS(BlueprintType)
class ANDROIDFILESYSTEM_API UCallback : public UObject
{
GENERATED_BODY()
public:
UFUNCTION() FORCEINLINE
FOneParamDelegate& GetFilePickerResultDelegate() { return this->OnFilePickerResult; }
private:
UPROPERTY(BlueprintAssignable)
FOneParamDelegate OnFilePickerResult;
};