【问题标题】:Take a screenshot on Android在 Android 上截屏
【发布时间】:2012-06-02 19:30:51
【问题描述】:

我正在尝试为 android 构建一个自定义启动器,它需要在用户按下主页按钮后立即截取设备的屏幕截图,因此在我的应用程序(启动器)返回前台之前。这个想法几乎是在我的启动器/活动/应用程序接管屏幕之前截取设备显示的任何内容。

我知道这样的事情需要 root 访问权限,但这不是问题。谁能教我怎么截图?一些示例代码?网上有教程吗?我在网上查过,但找不到任何有用的东西。我正在尝试简单地截取屏幕截图,就像 Android 市场上已经使用 root 访问权限的大量应用程序一样。在此先感谢:-)

【问题讨论】:

    标签: java android screenshot root


    【解决方案1】:

    这是一个安全漏洞。你应该有一个根设备才能做到这一点。

    您可以将此代码与您自己的应用程序一起使用:(我从另一个问题的答案中获得了此代码:https://stackoverflow.com/a/5651242/237838

    // image naming and path  to include sd card  appending name you choose for file
    String mPath = Environment.getExternalStorageDirectory().toString() + "/" + ACCUWX.IMAGE_APPEND;   
    
    // create bitmap screen capture
    Bitmap bitmap;
    View v1 = mCurrentUrlMask.getRootView();
    v1.setDrawingCacheEnabled(true);
    bitmap = Bitmap.createBitmap(v1.getDrawingCache());
    v1.setDrawingCacheEnabled(false);
    
    OutputStream fout = null;
    imageFile = new File(mPath);
    
    try {
       fout = new FileOutputStream(imageFile);
       bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
       fout.flush();
       fout.close();
    } catch (FileNotFoundException e) {
       e.printStackTrace();
    } catch (IOException e) {
       e.printStackTrace();
    }
    

    尝试查看此代码以获得更多帮助:

    P.S. 可以使用 DDMS 从 Android 截取屏幕截图,但这是另一回事。

    P.P.S. 如果您想在其下方的 Activity 上透明地绘制您的启动器,您需要将像素格式设置为 RGBA(仅处理 OpenGL)并进行相应的渲染。您无需截取底层活动的屏幕截图即可。

    有根设备:在有根设备上使用此代码:

    process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0");
    InputStream is = process.getInputStream();
    

    【讨论】:

    • 这截取了我的活动视图。如果我想在我的应用程序处于后台时截屏,这并不是很有用。
    • 你必须扎根才能拍摄任何不属于你的东西。
    • 我知道,这就是为什么我说 root 访问不是问题
    • 正如我在回答中所说,您试图实现的是安全漏洞(想象一个应用程序截取您的信用卡 ID)。
    • 我知道,但是我该怎么做呢? Android Market 上的很多应用都可以做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2017-10-09
    • 2014-08-21
    相关资源
    最近更新 更多