【问题标题】:Flutter native android callbackFlutter原生android回调
【发布时间】:2019-08-12 09:10:17
【问题描述】:

我正在开发一个需要一些原生 Android 代码帮助的颤振应用程序。更具体地说,我想集成一个名为“IronSource”的广告网络来在我的应用中投放广告。但目前他们没有提供 Flutter 库,所以我用 Java 语言编写了所需的代码,并进行了平台调用来展示广告。广告已成功展示,但我对如何收听他们提供的回调方法有疑问。

我将发布到目前为止我尝试过的内容。

new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
            new MethodCallHandler() {
                @Override
                public void onMethodCall(MethodCall call, Result result) {
                    if (call.method.equals("loadInterstitialAd")) {
                      IronSource.loadInterstitial();
                    } else {
                      result.notImplemented();
                      }
                      }
            });

上述方法将监听频道并加载广告。但是,这些是本机库中可用的一些回调方法:

public void onInterstitialAdLoadFailed
public void onInterstitialAdOpened()
public void onInterstitialAdClosed()
public void onInterstitialAdShowSucceeded()

等等……

现在我不明白如何在 Flutter 中访问这些方法并编写自己的代码。

任何想法/建议将不胜感激。
谢谢

【问题讨论】:

标签: java android dart callback flutter


【解决方案1】:

您可以为onInterstitialAdLoadFailedonInterstitialAdOpenedonInterstitialAdClosedonInterstitialAdShowSucceeded 定义一些Integer 值,并在这些回调方法中调用Result.onSuccess(Object)。下面是示例代码:

原生部分:

Result mResult;
new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
    new MethodCallHandler() {
        @Override
        public void onMethodCall(MethodCall call, Result result) {
            if (call.method.equals("loadInterstitialAd")) {
              IronSource.loadInterstitial();
              mResult = result;//save the result
            } else {
              result.notImplemented();
            }
        }
    });

 public void onInterstitialAdLoadFailed(){
     mResult.success(0);
 }
 public void onInterstitialAdOpened(){
     mResult.success(1);
 }
 public void onInterstitialAdClosed(){
     mResult.success(2);
 }
 public void onInterstitialAdShowSucceeded(){
     mResult.success(3);
 }

颤振部分:

int resultCode = await loadAds();
if(resultCode == 0){ ... }
else if(resultCode == 1){ ... }
else if(resultCode == 2){ ... }
else if(resultCode == 3){ ... }

【讨论】:

  • 不能声明Result mResult,它是一个接口
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 2021-12-28
  • 2020-03-03
  • 1970-01-01
  • 2020-06-06
  • 2020-11-14
  • 2016-09-09
相关资源
最近更新 更多