Android:如何在 root 设备上获取帧缓冲区(屏幕截图)?

2023-11-21

我试过 :

process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0 > /sdcard/frame.raw");
process.waitFor();

但它不起作用。我的设备已植根。

我看到很多答案,它需要根访问,但没有实际代码来获取帧缓冲区。

我也尝试过 glReadPixels() 但没有运气。

public void TakeScreen() {

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int width = dm.widthPixels;
        int height = dm.heightPixels;

        int screenshotSize = width * height;
        ByteBuffer bb = ByteBuffer.allocateDirect(screenshotSize * 4);
        bb.order(ByteOrder.nativeOrder());
        gl.glReadPixels(0, 0, width, height, GL10.GL_RGBA,
                GL10.GL_UNSIGNED_BYTE, bb);
        int pixelsBuffer[] = new int[screenshotSize];
        bb.asIntBuffer().get(pixelsBuffer);
        bb = null;
        Bitmap bitmap = Bitmap.createBitmap(width, height,
                Bitmap.Config.RGB_565);
        bitmap.setPixels(pixelsBuffer, screenshotSize - width, -width, 0, 0,
                width, height);
        pixelsBuffer = null;

        short sBuffer[] = new short[screenshotSize];
        ShortBuffer sb = ShortBuffer.wrap(sBuffer);
        bitmap.copyPixelsToBuffer(sb);

        for (int i = 0; i < screenshotSize; ++i) {
            short v = sBuffer[i];
            sBuffer[i] = (short) (((v & 0x1f) << 11) | (v & 0x7e0) | ((v & 0xf800) >> 11));
        }
        sb.rewind();
        bitmap.copyPixelsFromBuffer(sb);
        saveBitmap(bitmap, "/screenshots", "capturedImage");
    }

在我看来你的问题是这个标志:>。您不能使用重定向输出exec。您需要做的是抓取进程的输出流(这是您的输入流)并将其存储到文件中;

process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0");
InputStream is = process.getInputStream();
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:如何在 root 设备上获取帧缓冲区(屏幕截图)? 的相关文章

  • 如何在android中实现触摸平滑图像橡皮擦?

    我已经从 API 演示中看到了finturePaint java 我想实现触摸平滑橡皮擦 通过在android中触摸移动来擦除部分图像 FingerPaint 告诉我要实现这个 mPaint setXfermode new PorterDu
  • 我在布局上看不到任何 FirebaseRecyclerAdapter 项目

    我试图将数据从 Firebase 数据库检索到我的布局 但我看不到任何项目FirebaseRecyclerAdapter在布局中 请帮忙 我按照一个教程展示了如何做到这一点 当我运行应用程序时 我没有看到任何项目 但我可以滚动 public
  • 从响应中获取标头(Retrofit / OkHttp 客户端)

    我正在使用 Retrofit 与 OkHttp 客户端和 Jackson 进行 Json 序列化 并希望获取响应的标头 我知道我可以扩展 OkClient 并拦截它 但这发生在反序列化过程开始之前 我基本上需要的是获取标头以及反序列化的 J
  • Android Studio:XML 布局中的“包装在容器中”

    编辑 XML 布局文件时 Eclipse 有一项称为 包裹在容器中 的功能 重新格式化 gt Android gt 可让您选择一个或多个视图并在其周围包裹您选择的布局 Android Studio中有类似的东西吗 目前正在实施中 问题 69
  • AdapterContextMenuInfo 始终为 null

    我尝试通过 android 开发文档中的书来做到这一点 this didn t create a menu i don t know why registerForContextMenu getListView setListAdapter
  • 如何使用 Google Maps for Android V2 处理地图移动结束?

    我想在地图中心更改后立即对地址进行地理编码 如何使用新的 Android 版 Google 地图 V2 处理地图移动 我说的是用户用手指拖动地图的情况 查看新的地图 API Override public void onMapReady G
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • Bitmap.getPixels() 中的 IllegalArgumentException

    我想将数据从位图复制到int using getPixels 这是我当前的代码 int pixels new int myBitmap getHeight myBitmap getWidth myBitmap getPixels pixel
  • 在 Cordova 应用程序中获取额外功能

    我们有两个 Android 应用程序 一个使用本机 Java 实现 另一个使用 Ionic 编写 Ionic 应用程序启动我的应用程序 这是使用灯插件 https github com lampaa com lampa startapp 我
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 从 BroadcastReceiver 类调用活动方法

    我知道我可以做一个内部接收器类来调用接收器中的任何方法 但我的主要活动太大了 要做的事情也很多 因此 我需要一个扩展广播接收器的类 但它不是内部类 并且可以从我的主要活动中调用一种方法 我不知道是否可能 但我的活动是家庭活动和 single
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • WorkManager 或 AlarmManager 用于日常请求然后通知工作?

    这是用例 用户设置具有特定时间的每日通知 在指定时间 发出网络请求以获取一些数据 然后使用检索到的数据显示通知 我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例 据我了解 AlarmManager
  • 您使用什么物理 Android 设备进行测试?

    有什么好的推荐用于测试目的的物理 Android 设备吗 我正在苹果阵营寻找像 iPod touch 这样的设备 可以帮助 iOS 开发人员测试他们的东西 我知道有 Nexus One 但那东西相当昂贵 而且我并不真正关心手机的东西 而是可
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 卡片视图 单击卡片移至新活动

    我是 Android 编程新手 正在研究卡片布局 我想知道如何使其可点击 android clickable true android foreground android attr selectableItemBackground 我的卡
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A

随机推荐

  • 代码高尔夫:将多个排序列表合并为一个排序列表

    实现一种算法 将任意数量的排序列表合并为一个排序列表 目的是用您喜欢的任何语言创建最小的工作程序 例如 input 1 4 7 2 5 8 3 6 9 output 1 2 3 4 5 6 7 8 9 input 1 10 2 5 6 7
  • 谷歌帐户注销并重定向

    我正在使用 openid 来登录用户 仅限谷歌帐户 现在我的页面中有一个注销链接 单击该链接后 我希望用户退出谷歌帐户并将页面重定向到我的主页 这可以做到吗 Edit 更改接受的答案 因为现在 Google 允许重定向 继续 到您想要的任何
  • C# / .Net 中“新”属性的优缺点?

    考虑以下示例代码 delivery strategies public abstract class DeliveryStrategy public class ParcelDelivery DeliveryStrategy public
  • 对具有 NaN 的列进行缩尾处理不会更改最大值

    请注意 不久前有人提出了类似的问题 但从未得到答复 请参阅缩尾处理不会改变最大值 我在尝试着winsorize数据框中的列使用winsorize from scipy stats mstats 如果列中没有 NaN 值 则该过程正常运行 然
  • Java流/收集:将具有多个字段的一项映射到多个键

    我想尝试使用 java 收集器编写以下代码 给定一个人的 2 个属性 名字和姓氏 我想获取一个包含唯一的名字或姓氏作为键的映射 以及相应人员的列表 这是一组数据 Person person1 new Person person1 setFi
  • Android 处理程序更改 WeakReference

    我的静态处理程序有一个WeakReference to my Activity 这是为了防止有据可查的内存泄漏问题 我发布了一条长时间延迟的消息 我希望将此消息传递到我的活动 应该位于前台 我担心的是 在方向改变时 我的活动被销毁 并且处理
  • PHP5 使用 fopen 时出现无法打开流:HTTP 请求失败错误

    这个问题似乎过去在谷歌和这里到处都有讨论 但我还没有找到解决方案 一个非常简单的 fopen 给了我一个 PHP 警告 fopen http www google ca 无法打开流 HTTP 请求失败 我正在获取的 URL 并不重要 因为即
  • SQL Server 循环删除记录超出锁定超时

    我正在测试一个可以一次删除很多很多记录的过程 这不可以TRUNCATE TABLE 因为里面有需要保留的记录 由于体积的原因 我将删除分成了与此类似的循环 Do not block if records are locked SET LOC
  • 当应用程序未打开时收到推送通知时更新徽章编号

    我有一个应用程序 其中我面临这样的问题 徽章编号仅在打开通知时更新 但即使应用程序未打开 我也需要更新徽章编号 有人能帮我吗 您需要设置一个值badge输入您的推送通知负载 根据您的描述 听起来只有您的应用程序正在更新徽章编号 而不是通知本
  • 为什么我们需要在 eval JSON 中添加括号? [复制]

    这个问题在这里已经有答案了 为什么需要添加以下代码 and 用于评估 var strJson eval status val replace PS status val 返回类似的东西 10000048 1 25000175 2 25000
  • 用户可以清除 Service Worker 缓存吗?

    我已经构建了一个使用缓存的渐进式 Web 应用程序 但我不清楚用户是否可以 无意或故意 清除服务工作线程缓存 这可能会清除我的跟踪数据 当用户清除浏览数据 cookie 时 这会清除所有站点存储 包括 SW 缓存 cookie 本地存储 i
  • 将 XCTest 导入到现有项目中

    我添加了一个新目标作为 Cocoa Touch 单元测试包 名为目录 MyAppTests 并且实际框架未处于活动状态 它以红色突出显示 当我通过 构建阶段 选项卡技术中的 链接二进制文件与库 添加框架时 会添加一个新框架 而不是更新通过添
  • FLEX 中的重新调度事件

    在 FLEX 应用程序中 我试图 重新调度 自定义事件 IE 组件1执行dispatchEvnet event 组件2注册该事件的处理程序 该处理程序的唯一功能再次是dispatch event 最后 组件 3 监听来自组件 2 的事件 我
  • 了解 RecyclerView setHasFixedSize

    我有点难以理解setHasFixedSize 我知道它用于优化时的大小RecyclerView从文档来看 没有改变 但这意味着什么 在大多数常见情况下ListView几乎总是有固定的大小 什么情况下它不是固定大小 这是否意味着它在屏幕上占据
  • 如何更改Popup MenuButton弹窗的背景颜色?

    我想更改弹出菜单按钮窗口的背景颜色 我应该怎么办 我希望我能得到你的帮助 谢谢 当我改变容器的颜色时 有些角落不能改变颜色 new IconButton icon new Icon Icons search color Colors whi
  • 如何从fragment中listview的onitemclick事件中调用startactivity或调用intent?

    我有一个具有自己的布局的片段 在布局中 有一个列表视图 我附加了 onitemclick 侦听器 单击列表行时将启动 打开意图 不幸的是 我总是收到这个错误 从 Activity 上下文外部调用 startActivity 需要 FLAG
  • 如何查找影响特定列的存储过程列表?

    我正在研究这个大型数据库 其中 SP 中嵌入了很多业务知识 我知道 并且 SP 之间有很多链接 即一个存储过程调用另一个存储过程 我想找出更新特定列的存储过程列表 我该怎么做呢 使用 showplan All 中概述的用于存储过程的 SQL
  • D3.js:如何组合 2 个数据集以创建地图并在鼠标悬停时显示值?

    我想在 D3 js 中的地图上合并两个数据集 例如 第一个数据集 json 格式的空间数据 第二个数据集 csv 中区域的数据 gt 当您将鼠标悬停在地图上时 工具提示应显示一个句子 其中包含第二个数据集中的一些数据 我可以制作地图并显示包
  • 选择包含“foo”的属性的正确 XPath 是什么?

    给定这个 XML XPath 返回其所有元素prop属性包含Foo 前三个节点
  • Android:如何在 root 设备上获取帧缓冲区(屏幕截图)?

    我试过 process Runtime getRuntime exec su c cat dev graphics fb0 gt sdcard frame raw process waitFor 但它不起作用 我的设备已植根 我看到很多答案