首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过AIDL通过SurfaceHolder?

如何通过AIDL通过SurfaceHolder?
EN

Stack Overflow用户
提问于 2017-02-10 09:51:57
回答 1查看 3K关注 0票数 4

我有两个独立的Android应用程序(apk)。

App 1在其内部创建SurfaceView,并为其他应用程序提供AIDL方法,以获得此类SurfaceViewSurfaceHolder实例。因此,其他应用程序将能够在该视图上绘制,显示在应用程序1中。

我能够轻松地通过aidl传输Surface本身,因为它实现了Parcelable接口。

代码语言:javascript
复制
// 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。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-13 09:25:25

过一段时间后,最后创建一个适合这里的OffscreenRender API的解决方案。

在一个应用程序中,我创建了SurfaceHolder,这个应用程序提供了AIDL (见上面的文章)。使用这个AIDL,我能够正确地发送SurfaceHolder,然后,在app 2端,从它生成SurfaceHolder。

代码语言:javascript
复制
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大小。

希望这对某人有帮助。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42156262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档