我想使用AIDL将SurfaceView从活动传递给服务。 在服务中我将渲染视频。
答案 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)
Service
旨在在后台中执行某些操作。如果要播放视频文件或流,请使用其布局中带有VideoView
的全屏活动。将uri媒体传递给VideoView
。