Native Extension如何在Android设备上截屏?

时间:2014-01-16 14:20:29

标签: java android actionscript-3 air

我有一个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截取屏幕截图?

非常感谢!

2 个答案:

答案 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" />