package com.demo.library_flutter.nativeview; import android.app.Activity; import android.app.ActivityManager; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import com.bytedance.sdk.openadsdk.AdSlot; import com.bytedance.sdk.openadsdk.TTAdConstant; import com.bytedance.sdk.openadsdk.TTAdDislike; import com.bytedance.sdk.openadsdk.TTAdManager; import com.bytedance.sdk.openadsdk.TTAdNative; import com.bytedance.sdk.openadsdk.TTNativeExpressAd; import com.demo.lib.common.util.ui.MyActivityManager; import com.demo.library_ad.TTAdManagerHolder; import com.idlefish.flutterboost.FlutterBoost; import java.util.List; import java.util.Map; import androidx.annotation.NonNull; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MessageCodec; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.platform.PlatformView; import io.flutter.plugin.platform.PlatformViewFactory; class CSJExpressNativeView implements PlatformView { private Map params; private TTAdNative mTTAdNative; private MethodChannel methodChannel; public CSJExpressNativeView(int viewId, Map params, Context context, BinaryMessenger binaryMessenger) { this.params = params; try { TTAdManager ttAdManager = TTAdManagerHolder.get(); mTTAdNative = ttAdManager.createAdNative(context); } catch (Exception e) { e.printStackTrace(); } methodChannel = new MethodChannel(binaryMessenger, "ad-csj-express-view-" + viewId); methodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() { @Override public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) { if ("refresh".equalsIgnoreCase(call.method)) { //刷新 if (fl_container != null && adSlot != null) { loadAd(adSlot, fl_container); } } } }); } private AdSlot adSlot = null; private FrameLayout fl_container; @Override public View getView() { if (fl_container == null) { fl_container = new FrameLayout(getView().getContext()); } if (adSlot == null) { float width = Float.parseFloat(params.get("width") + ""); float height = Float.parseFloat(params.get("height") + ""); String pid = params.get("pid") + ""; adSlot = new AdSlot.Builder() .setCodeId(pid) .setSupportDeepLink(true) .setExpressViewAcceptedSize(width, height) .setAdCount(1) //请求广告数量为1到3条 .build(); } loadAd(adSlot, fl_container); return fl_container; } private void loadAd(AdSlot adSlot, FrameLayout container) { mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() { @Override public void onError(int i, String s) { //加载失败 methodChannel.invokeMethod("loadFail", s); } @Override public void onNativeExpressAdLoad(List list) { if (list != null && list.size() > 0) { if (FlutterBoost.instance().currentActivity() != null) { list.get(0).setDislikeCallback(FlutterBoost.instance().currentActivity(), new TTAdDislike.DislikeInteractionCallback() { @Override public void onShow() { } @Override public void onSelected(int i, String s, boolean b) { //关闭广告 methodChannel.invokeMethod("close", null); } @Override public void onCancel() { } }); } list.get(0).render(); fl_container.removeAllViews(); if (list.get(0).getExpressAdView().getParent() != null) { ((ViewGroup) list.get(0).getExpressAdView().getParent()).removeAllViews(); } fl_container.addView(list.get(0).getExpressAdView()); } } }); } @Override public void dispose() { } }