And*_*rov 3 android surfaceview aidl here-api surfaceholder
我有2个独立的Android应用程序(apk)。
应用1 SurfaceView在其中创建,并应为其他应用提供AIDL方法,以获取SurfaceHolderfor 的实例SurfaceView。因此,其他应用程序将能够在该视图中绘制,该视图显示在应用程序编号1中。
Surface由于它实现了Parcelable接口,因此我可以轻松地通过aidl 进行自身传输。
// IMainService.aidl
package com.commonsware.cwac.preso.demo.service;
import android.view.Surface;
interface IMainService {
Surface getSurf();
}
Run Code Online (Sandbox Code Playgroud)
但是第三方SDK需要SurfaceHolder使用。所以问题是-我如何SurfaceHolder为给定Surface实例创建,或者如何SurfaceHolder通过AIDL进行传输。有什么例子可以实现Parcelable SurfaceHolder吗?
我的用例(如果有的话):应用程序1作为a启动,Service并在Presentation Screen上绘制UI。而且,我需要一种方法来让另一个应用程序通过应用程序1内的Nokia Here Mobile SDK显示导航数据。我需要SurfaceHolder使用此 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;
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,它是我自己的SurfaceHolder,由我自己而不是系统初始化。这种方法还需要扩展AIDL才能请求Rect大小。
希望对您有所帮助。
| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |