android - Adobe Air Native Extensions 和 VideoView - 调用 MediaController.show() 时在较新的设备上崩溃

标签 android air starling-framework air-native-extension

我的应用程序是一个使用 Starling 引擎并播放流媒体视频的 Air 应用程序。

由于Starling对Video播放的支持不是很好,所以我决定走原生的路,自己写了一个ANE来播放视频。

我启动了一个带有 VideoView 的新 Activity 来显示视频,在较新的 Android(测试 API 级别 19 和 18)上,当调用 MediaController.show() 时,应用程序崩溃了。我没有有用的堆栈跟踪,因为 Android 位被编译为 native 扩展。 在旧设备上(在 API 级别 15 和 9 上测试),MediaController 工作正常。

我还尝试用播放/暂停 ImageView 替换 MediaController,同样,它在旧设备上工作正常,而在较新的设备上它播放一次显示的图像,第二次不显示图像(对象仍然创建和布局的 child )和应用程序第三次完全崩溃。

在较新的设备上,如果我删除 ImageView 应用程序不会崩溃,如果我保留 ImageView 附加,并且不调用 requestWindowFeature(Window.FEATURE_NO_TITLE)。

这是适用于旧设备的代码(使用 MediaController):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //this works proven with Android API Level 15 and lower. On Kitkat and 4.3 it blows up (18 and above)
    if(Build.VERSION.SDK_INT <= 15)
        requestWindowFeature(Window.FEATURE_NO_TITLE);

    int resourceId = PlayVideoFunction.ctx.getResourceId("layout.main");
    setContentView(resourceId);

    Log.d("NativeExtension", "OnCreate " + this.toString());

    Log.d("NativeExtension", "On Resume");
    String url = getIntent().getStringExtra("url");
    Log.d("NativeExtension", "url " + url);
    int videoViewId = PlayVideoFunction.ctx.getResourceId("id.videoView");

    videoView = (VideoView) findViewById(videoViewId);
    videoView.setVideoURI(Uri.parse(url));
    videoView.setOnCompletionListener(this);
    videoView.setOnErrorListener(this);
    videoView.setOnPreparedListener(this);

    MediaController mediaController = new MediaController(this);
    mediaController.setAnchorView(videoView);
    mediaController.setMediaPlayer(videoView);
    videoView.setMediaController(mediaController);
}

有人遇到过与 native 扩展相关的类似问题吗?我的猜测是,它必须对 Android 和 Air/Starling 中的 Window 对象执行某些操作。除此之外,我迷路了。

编辑:在此处发布 logcat(要粘贴的字符太多) http://pastebin.com/tnuEgWFA

最佳答案

我放弃了弄清楚它崩溃的原因,并最终找到了两种处理视频播放的方法。

在较新的设备(Jelly Bean 及更高版本)上,我只是启动设备上的默认视频播放器来观看视频。他们可以很好地处理切换回空气。

然而,在旧设备上,我在 native 扩展本身内显示视频 - 使用 VideoView 和 MediaController。这样我就不必冒 air/starling 应用程序被 Android 的 GC 离开时被杀死的风险。

关于android - Adobe Air Native Extensions 和 VideoView - 调用 MediaController.show() 时在较新的设备上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22048856/

相关文章:

android - 如何使用图表引擎更改饼图系列标签文本的默认颜色?

actionscript-3 - 如何使用 FB 4.6 将 stagewebviewbridge 实例添加到舞台

apache-flex - Adobe air...启动网站但选择哪个浏览器?

actionscript-3 - 视网膜支持的 AIR 项目尺寸

android - 用于设置 Android Lollipop 中的通知的按钮

android - 应用程序的 onCreate 未被调用用于生产构建

Android 网络服务数据集

actionscript-3 - 从 AIR 桌面客户端发送推送通知,无需中间件(例如 PHP)

actionscript-3 - 羽毛按钮启用属性

ios - Starling AS3 : A lot of textures, 内存警告 iOS