ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – 如何通过AIDL传递SurfaceHolder?

2019-08-23 22:27:47  阅读:468  来源: 互联网

标签:aidl surfaceholder android surfaceview here-api


我有2个单独的Android应用程序(apk).

应用程序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来吸引.所以问题是 – 如何为给定的Surface实例创建SurfaceHolder,或者如何通过AIDL传输SurfaceHolder.有没有关于如何为SurfaceHolder实现Parcelable的示例?

我的用例(如果有的话):App 1作为服务启动并在Presentation Screen上绘制UI.我需要一种方法来获取另一个应用程序通过诺基亚这里移动SDK在应用程序1中显示导航数据.我需要SurfaceHolder才能使用this api.

任何帮助将不胜感激.

解决方法:

过了一会儿,最后创建一个适用于Here OffscreenRender API的解决方案.

在一个应用程序中,我创建了SurfaceHolder,这个应用程序提供了AIDL(参见上面的帖子).有了这个AIDL,我能够正确发送Surface对象,然后在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大小.

希望对某人有所帮助.

标签:aidl,surfaceholder,android,surfaceview,here-api
来源: https://codeday.me/bug/20190823/1701382.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有