如何通过AIDL在活动和服务之间传递表面视图?

时间:2018-05-14 10:06:17

标签: android surfaceview aidl

我想使用AIDL将SurfaceView从活动传递给服务。 在服务中我将渲染视频。

4 个答案:

答案 0 :(得分:1)

只有一个解决方案,但您需要使用单独的surfaceview并确保您的实施中没有任何UI泄漏。有一点,你需要在每次使用surfaceview时重新初始化。每当你离开已经初始化了surfaceview的活动和服务时,都会被破坏。因为windowmanager采取了surfaceview / surface。

答案 1 :(得分:1)

找到解决方案, 而不是传递表面视图应用程序可以传递实际实现parcelable接口的Surface,而Surface类的实例可以传递给MediaPlayer.setSurface()来呈现视频。

在.aidl文件中

import android.view.Surface;

oneway interface{
void startRender( in Surface surface)
}

在服务中

    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.stop();
    mediaPlayer.reset();
    mediaPlayer.setSurface(surfaceViewId);

在申请中

 serviceInstance.startRender((((SurfaceView)findViewById(R.id.surfaceView)).getHolder()).getSurface());

答案 2 :(得分:0)

您无法使用AIDL传递surfaceview。默认情况下,仅支持某些数据类型,列表和映射。您也可以包裹自定义对象,但surfaceview不是其中之一。更多Info

答案 3 :(得分:0)

android中的

Service旨在在后台中执行某些操作。如果要播放视频文件或流,请使用其布局中带有VideoView的全屏活动。将uri媒体传递给VideoView