Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取android上其他正在运行的应用程序的屏幕截图_Android_Process_Screenshot - Fatal编程技术网

获取android上其他正在运行的应用程序的屏幕截图

获取android上其他正在运行的应用程序的屏幕截图,android,process,screenshot,Android,Process,Screenshot,在Android上,我可以通过在activity manager上执行GetRunningAppProcess来获取正在运行的应用程序列表: ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunni

在Android上,我可以通过在activity manager上执行GetRunningAppProcess来获取正在运行的应用程序列表:

        ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses();
ActivityManager am=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
列表
我可以在自己的应用程序中获得这些截图吗?如何获取表示给定窗口内容的图像


Endriu

无需root访问即可拍摄屏幕截图:

@SuppressLint("NewApi")
    public void takeScreenshot(Context context, String fileFullPath)
    {
        if(fileFullPath == ""){
            format = new SimpleDateFormat("yyyyMMddHHmmss");
            String fileName = format.format(new Date(System.currentTimeMillis())) + ".png";
            fileFullPath = "/data/local/tmp/" + fileName;
        }

        if(ShellUtils.checkRootPermission()){
            if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH){
                ShellUtils.execCommand("/system/bin/screencap -p "+ fileFullPath,true);
            }
        }
        else {
            if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2 && android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH){
                wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
                mDisplay = wm.getDefaultDisplay();
                mDisplayMatrix = new Matrix();
                mDisplayMetrics = new DisplayMetrics();
                // We need to orient the screenshot correctly (and the Surface api seems to take screenshots
                // only in the natural orientation of the device :!)
                mDisplay.getRealMetrics(mDisplayMetrics);
                float[] dims =
                {
                        mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels
                };
                float degrees = getDegreesForRotation(mDisplay.getRotation());
                boolean requiresRotation = (degrees > 0);
                if (requiresRotation){
                    // Get the dimensions of the device in its native orientation
                    mDisplayMatrix.reset();
                    mDisplayMatrix.preRotate(-degrees);
                    mDisplayMatrix.mapPoints(dims);
                    dims[0] = Math.abs(dims[0]);
                    dims[1] = Math.abs(dims[1]);
                }

                Bitmap mScreenBitmap = screenShot((int) dims[0], (int) dims[1]);
                if (requiresRotation)   {
                    // Rotate the screenshot to the current orientation
                    Bitmap ss = Bitmap.createBitmap(mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels,
                            Bitmap.Config.ARGB_8888);
                    Canvas c = new Canvas(ss);
                    c.translate(ss.getWidth() / 2, ss.getHeight() / 2);
                    c.rotate(degrees);
                    c.translate(-dims[0] / 2, -dims[1] / 2);
                    c.drawBitmap(mScreenBitmap, 0, 0, null);
                    c.setBitmap(null);
                    mScreenBitmap = ss;
                    if (ss != null && !ss.isRecycled()) {
                        ss.recycle();
                    }
                }

                // If we couldn't take the screenshot, notify the user
                if (mScreenBitmap == null){
                    Toast.makeText(context, "screen shot fail", Toast.LENGTH_SHORT).show();
                }

                // Optimizations
                mScreenBitmap.setHasAlpha(false);
                mScreenBitmap.prepareToDraw();

                saveBitmap2file(context, mScreenBitmap, fileFullPath);  // save image file
            }
        }

    }
@SuppressLint(“NewApi”)
公共void截图(上下文上下文,字符串fileFullPath)
{
如果(fileFullPath==“”){
格式=新的SimpleDataFormat(“yyyyMMddHHmmss”);
字符串文件名=format.format(新日期(System.currentTimeMillis())+“.png”;
fileFullPath=“/data/local/tmp/”+文件名;
}
if(ShellUtils.checkRootPermission()){
if(android.os.Build.VERSION.SDK\u INT>=android.os.Build.VERSION\u code.ICE\u三明治){
execCommand(“/system/bin/screencap-p”+fileFullPath,true);
}
}
否则{
if(android.os.Build.VERSION.SDK_INT=android.os.Build.VERSION_code.ICE_三明治){
wm=(WindowManager)context.getSystemService(context.WINDOW\u服务);
mDisplay=wm.getDefaultDisplay();
mDisplayMatrix=新矩阵();
mDisplayMetrics=新的DisplayMetrics();
//我们需要正确定位屏幕截图(Surface api似乎可以截图)
//仅在设备的自然方向:!)
getRealMetrics(mDisplayMetrics);
浮动[]变暗=
{
mDisplayMetrics.widthPixels、mDisplayMetrics.heightPixels
};
float degrees=getDegreesForRotation(mDisplay.getRotation());
布尔要求旋转=(度>0);
如果(需要轮换){
//获取设备在其本机方向上的尺寸
mDisplayMatrix.reset();
mDisplayMatrix.预旋转(-度);
mDisplayMatrix.mapPoints(dims);
dims[0]=Math.abs(dims[0]);
dims[1]=数学abs(dims[1]);
}
位图mScreenBitmap=屏幕截图((int)dims[0],(int)dims[1]);
如果(需要轮换){
//将屏幕截图旋转到当前方向
位图ss=Bitmap.createBitmap(mDisplayMetrics.widthPixels、mDisplayMetrics.heightPixels、,
位图.Config.ARGB_8888);
画布c=新画布(ss);
c、 translate(ss.getWidth()/2,ss.getHeight()/2);
c、 旋转(度);
c、 平移(-dims[0]/2,-dims[1]/2);
c、 drawBitmap(mScreenBitmap,0,0,null);
c、 setBitmap(空);
mScreenBitmap=ss;
如果(ss!=null&&!ss.isRecycled()){
ss.recycle();
}
}
//如果我们无法拍摄屏幕截图,请通知用户
如果(mScreenBitmap==null){
Toast.makeText(上下文,“屏幕截图失败”,Toast.LENGTH_SHORT.show();
}
//优化
mScreenBitmap.setHasAlpha(false);
mScreenBitmap.prepareToDraw();
saveBitmap2file(上下文、mScreenBitmap、fileFullPath);//保存图像文件
}
}
}

来源:

您需要查看应用程序内部的屏幕截图吗?或者你只想在你的设备上制作其他应用程序的屏幕截图?我想在我的应用程序中看到它们。这不是我的意思。我不想有当前屏幕的截图,我有最小化应用程序的截图/预览,就像附加的图像一样(内置任务管理器可以获得它们)。