使用反射在android.view.SurfaceControl上调用createDisplay返回null

时间:2016-09-14 12:41:54

标签: android

我正在尝试使用反射在createDisplay上调用android.view.SurfaceControl方法,但它在Marshmallow设备上返回null。我不知道为什么。

要做的是在不使用MediaProjection API的情况下创建虚拟显示。 以下是代码。

Class surfaceControlClass = Class.forName("android.view.SurfaceControl");
Class cls = surfaceControlClass;
IBinder token = (IBinder) cls.getDeclaredMethod("createDisplay", new Class[]{String.class, Boolean.TYPE}).invoke(null, new Object[]{name, Boolean.valueOf(false)});

1 个答案:

答案 0 :(得分:2)

您需要系统权限(android.permission.ACCESS_SURFACE_FLINGER)才能执行此操作,检查LogCat并找到权限警告。 实际上,除非您拥有设备的平台签名,否则无法使其正常运行。 但您可以使用默认的AOSP签名在模拟器上测试它。