我有一个Adobe Air应用程序打算在Android设备上使用Native Extension截取屏幕截图,但java代码返回黑色图像。
public FREObject call(FREContext context, FREObject[] params) {
View view = context.getActivity().getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap image = view.getDrawingCache();
}
我对Adobe Air不太了解。我的java代码完全在Android Java Application上运行,但在带有Native Extension的Adobe Air Android应用程序上返回黑色图像。
是否有任何解决方案或任何方法在NativeExtension中使用Java截取屏幕截图?
非常感谢!
答案 0 :(得分:1)
可能是你没有得到正确的观点。试试这个以获得最顶层的根视图。
public FREObject call(FREContext context, FREObject[] params)
{
View view = findViewById(android.R.id.content).getRootView();
view.setDrawingCacheEnabled(true);
Bitmap image = view.getDrawingCache();
if(image == null)
{
System.out.println("Image returned was null!");
}
}
我还删除了buildDrawingCache()行;这有时会导致问题,而且从我所读到的内容来看并非完全必要。
最后,您要检查返回的位图是否为空。如果是这样,那可能就是它全黑的原因。
答案 1 :(得分:0)
你可以截取这样的截图并将其保存到SD卡中:
View content = findViewById(R.id.layoutroot);
content.setDrawingCacheEnabled(true);
Function to get the rendered view:
private void getScreen()
{
View content = findViewById(R.id.layoutroot);
Bitmap bitmap = content.getDrawingCache();
File file = new File( Environment.getExternalStorageDirectory() + "/asdf.png");
try
{
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, ostream);
ostream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
您必须将此权限添加到AndroidManifest(如果要保存):
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />