我有两个独立的Android应用程序(apk)。
App 1在其内部创建SurfaceView,并为其他应用程序提供AIDL方法,以获得此类SurfaceView的SurfaceHolder实例。因此,其他应用程序将能够在该视图上绘制,显示在应用程序1中。
我能够轻松地通过aidl传输Surface本身,因为它实现了Parcelable接口。
// IMainService.aidl
package com.commonsware.cwac.preso.demo.service;
import android.view.Surface;
interface IMainService {
Surface getSurf();
}但是第三方sdk需要SurfaceHolder来借鉴.所以问题是--如何为给定的SurfaceHolder实例创建Surface,或者如何通过AIDL传输SurfaceHolder。有任何例子说明我如何为SurfaceHolder实现Parcelable吗?
我的用例(如果有问题的话):App 1从Service开始,在演示屏幕上绘制UI。我需要一种方法来获得另一个应用程序,通过Nokia在应用程序1中显示导航数据。我需要SurfaceHolder来使用这 api。
任何帮助都将不胜感激。
发布于 2017-02-13 09:25:25
过一段时间后,最后创建一个适合这里的OffscreenRender API的解决方案。
在一个应用程序中,我创建了SurfaceHolder,这个应用程序提供了AIDL (见上面的文章)。使用这个AIDL,我能够正确地发送SurfaceHolder,然后,在app 2端,从它生成SurfaceHolder。
public class MySurfaceHolder implements SurfaceHolder {
private Surface surface;
private Rect rect;
MySurfaceHolder(Surface surface, Rect rect) {
this.surface = surface;
this.rect = rect;
}
///....
@Override
public Canvas lockCanvas() {
return surface.lockCanvas(this.rect);
}
@Override
public Canvas lockCanvas(Rect rect) {
return surface.lockCanvas(rect);
}
@Override
public void unlockCanvasAndPost(Canvas canvas) {
surface.unlockCanvasAndPost(canvas);
}
@Override
public Rect getSurfaceFrame() {
return rect;
}
@Override
public Surface getSurface() {
return surface;
}
}基本上,这是我自己的SurfaceHolder,它由我自己的,而不是系统初始化。这种方法也需要扩展AIDL来请求Rect大小。
希望这对某人有帮助。
https://stackoverflow.com/questions/42156262
复制相似问题