Android 活动的屏幕截图

Android 活动的屏幕截图,android,Android,我想为我的应用程序当前显示的内容创建一个位图,其中一件事是无法读取FB buffer Required root,想知道是否可以为屏幕创建图像文件,请我需要帮助来编写此代码,没有第三方意图,谢谢,非常感谢您的活动中的回答(伪代码): 您可以使用FFMPEG捕获屏幕试试这个 { LinearLayout view = (LinearLayout) findViewById(R.id.imageLayout); View v1 = view.getRootView(); v1

我想为我的应用程序当前显示的内容创建一个位图,其中一件事是无法读取FB buffer Required root,想知道是否可以为屏幕创建图像文件,请我需要帮助来编写此代码,没有第三方意图,谢谢,非常感谢您的活动中的回答(伪代码):


您可以使用FFMPEG捕获屏幕

试试这个

{
    LinearLayout view = (LinearLayout) findViewById(R.id.imageLayout);
    View v1 = view.getRootView();
    v1.setDrawingCacheEnabled(true);
    String dir="myimages";
    Bitmap bm = v1.getDrawingCache();        
    saveBitmap(bm, dir, "capturedimage");
}
static String saveBitmap(Bitmap bitmap, String dir, String baseName) {
    try {
        File sdcard = Environment.getExternalStorageDirectory();
        File pictureDir = new File(sdcard, dir);
        pictureDir.mkdirs();
        File f = null;
        for (int i = 1; i < 200; ++i) {
            String name = baseName + i + ".png";    
            f = new File(pictureDir, name);
            if (!f.exists()) {
                break;
            }
        }
        System.out.println("Image size : "+bitmap.getHeight());
        if (!f.exists()) {
            String name = f.getAbsolutePath();
            FileOutputStream fos = new FileOutputStream(name);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
            System.out.println("After File Size : "+f.length());
            fos.flush();
            fos.close();

            return name;
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("Exception in saveBitmap: "+e.getMessage());
    } finally {

    }
    return null;
}
{
LinearLayout视图=(LinearLayout)findViewById(R.id.imageLayout);
View v1=View.getRootView();
v1.setDrawingCacheEnabled(真);
String dir=“myimages”;
位图bm=v1.getDrawingCache();
保存位图(bm,dir,“capturedimage”);
}
静态字符串保存位图(位图位图、字符串目录、字符串基本名称){
试一试{
文件sdcard=Environment.getExternalStorageDirectory();
File pictureDir=新文件(SD卡,目录);
pictureDir.mkdirs();
文件f=null;
对于(int i=1;i<200;++i){
字符串名称=baseName+i+“.png”;
f=新文件(pictureDir,名称);
如果(!f.exists()){
打破
}
}
System.out.println(“图像大小:+bitmap.getHeight());
如果(!f.exists()){
字符串名称=f.getAbsolutePath();
FileOutputStream fos=新的FileOutputStream(名称);
compress(bitmap.CompressFormat.PNG,100,fos);
System.out.println(“文件大小之后:+f.length());
fos.flush();
fos.close();
返回名称;
}
}捕获(例外e){
e、 printStackTrace();
System.out.println(“保存位图中的异常:+e.getMessage());
}最后{
}
返回null;
}

显然,我没有发现任何问题,似乎需要root,如果是这种情况,那就太糟糕了!与其只发布一段代码,不如解释一下为什么这段代码可以解决问题。如果没有解释,这不是答案。
{
    LinearLayout view = (LinearLayout) findViewById(R.id.imageLayout);
    View v1 = view.getRootView();
    v1.setDrawingCacheEnabled(true);
    String dir="myimages";
    Bitmap bm = v1.getDrawingCache();        
    saveBitmap(bm, dir, "capturedimage");
}
static String saveBitmap(Bitmap bitmap, String dir, String baseName) {
    try {
        File sdcard = Environment.getExternalStorageDirectory();
        File pictureDir = new File(sdcard, dir);
        pictureDir.mkdirs();
        File f = null;
        for (int i = 1; i < 200; ++i) {
            String name = baseName + i + ".png";    
            f = new File(pictureDir, name);
            if (!f.exists()) {
                break;
            }
        }
        System.out.println("Image size : "+bitmap.getHeight());
        if (!f.exists()) {
            String name = f.getAbsolutePath();
            FileOutputStream fos = new FileOutputStream(name);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
            System.out.println("After File Size : "+f.length());
            fos.flush();
            fos.close();

            return name;
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("Exception in saveBitmap: "+e.getMessage());
    } finally {

    }
    return null;
}