1

我正在创建一个 AIR 原生扩展来集成 AdMob。

我已遵循此处描述的使用外部资源的指南:http: //www.adobe.com/devnet/air/articles/ane-android-devices.html

并将 google 的 adMob jar 打包到我的本机扩展 jar 中,如下所述:AIR 3 Native Extensions for Android - Can I/How to include 3rd party library?

我有一个NewAdFunction实现FREFunction并由 actionscript 端调用的类。该NewAdFunction.call()函数基本上包含以下内容:(在我的实际代码中,我有必要的尝试捕获)

Intent intent = new Intent(context.getActivity(), AdMobActivity.class);
layoutID = context.getResourceId("layout.adlayout");
intent.putExtra("layoutID", layoutID);
context.getActivity().startActivity(intent);

在上面的代码adlayout中是一个位于 res/layout 中的 xml。我将整个 res 文件夹打包到我的最终 jar 中,并在我的测试 AIR 项目的 xml 中包含以下代码。

<application android:enabled="true" android:debuggable="true">
            <activity android:name="com.mycompany.admob.AdMobActivity"></activity>
</application>

在下面的代码中,一切正常,直到达到layout.addView(adView);此时程序崩溃,但没有通过控制台打印任何内容。

public class AdMobActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        int layoutID = getIntent().getIntExtra("layoutID", -1);
        setContentView(layoutID);
        LinearLayout layout = (LinearLayout)findViewById(layoutID);
        AdView adView = new AdView(this, AdSize.BANNER, MY_DEVELOPER_ID);
        layout.addView(adView);
    }
}

我能想到的只是布局可能为空,但我添加了一个跟踪函数,它不为空。

4

1 回答 1

0

我发现实际上布局变量确实为空。我没有使用 xml 创建布局,而是像这样以编程方式创建它:

public FREObject call(FREContext context, FREObject[] args) {
    AdView adView = new AdView(context.getActivity(), AdSize.BANNER, NewAdFunction.developerId);
    Activity activity = context.getActivity();

    ViewGroup viewGroup = (ViewGroup)activity.findViewById(android.R.id.content);
    viewGroup = (ViewGroup)viewGroup.getChildAt(0);
    LinearLayout layout = new LinearLayout(activity);
    viewGroup.addView(layout, new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

    adView.setVisibility(View.VISIBLE);
    layout.addView(adView, params);
}

这是我发现在 AIR 本机扩展中添加视图的最佳方式。

于 2013-09-30T22:03:15.573 回答