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

时间:2014-02-26 17:30:33

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

我的应用程序是Air应用程序,它使用Starling引擎并播放流式视频。

由于Starling并不能很好地支持视频播放,所以我决定采用原生方式编写ANE进行视频播放。

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

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

在较新的设备上,如果我移除了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);
}

是否有人遇到与原生扩展相关的类似问题?我的猜测是,它必须在Android和Air / Starling中使用Window对象。除此之外,我输了。

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

1 个答案:

答案 0 :(得分:0)

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

在较新的设备上(Jelly Bean及以上)我只是在设备上启动默认视频播放器来观看视频。他们可以处理切换回Air井。

然而,在较旧的设备上,我正在本机扩展中显示视频 - 使用VideoView和MediaController。这样,当您通过Android的GC离开它时,我不必冒风险/椋鸟应用程序被杀死。