我有 2 个单独的 Android 应用程序 (apk)。
App 1 在其中创建 SurfaceView
并且应该为其他应用程序提供 AIDL 方法以获取此类 SurfaceHolder
的 SurfaceView
实例。因此其他应用程序将能够在该 View 上绘制,显示在应用程序编号 1 中。
我能够通过 aidl 轻松传输 Surface
本身,因为它实现了 Parcelable 接口(interface)。
// IMainService.aidl
package com.commonsware.cwac.preso.demo.service;
import android.view.Surface;
interface IMainService {
Surface getSurf();
}
但是 3-rd 方 sdk 需要
SurfaceHolder
来借鉴。所以问题是 - 如何为给定的 SurfaceHolder
实例创建 Surface
,或者如何通过 AIDL 传输 SurfaceHolder
。有没有关于如何为 SurfaceHolder
实现 Parcelable 的示例?我的用例(如果它很重要):App 1 作为
Service
开始并在演示屏幕上绘制 UI。我需要一种方法让另一个应用程序通过应用程序 1 中的诺基亚 Here Mobile SDK 显示导航数据。我需要 SurfaceHolder
才能使用 this api。任何帮助将不胜感激。
最佳答案
一段时间后,终于创建了一个与 Here OffscreenRender API 配合良好的解决方案。
在一个应用程序中,我创建了 SurfaceHolder,这个应用程序提供了 AIDL(参见上面的帖子)。使用这个 AIDL,我能够正确发送 Surface 对象,然后在应用程序 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 大小。
希望这会对某人有所帮助。
关于android - 如何通过 AIDL 传递 SurfaceHolder?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42156262/