问题标签 [android-mediaprojection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
656 浏览

android - Android 中的 MediaProjection 服务问题

当用户在手机上安装应用程序时,他/她需要授予 MediaProjection 系统服务权限才能启动屏幕截图功能。每当用户重新启动手机时,用户每次都需要手动授予 MediaProjection 服务权限。我想做这样,当应用程序安装在移动设备上时,用户只需要授予一次 MediaProjection 权限,这样用户就不需要每次启动移动设备时都分配权限。

另一个问题是一段时间后 MediaProjection 服务会自动/随机停止。

此代码在我们手动启用权限时启动 MediaProjection 系统服务权限:

此代码在移动设备重新启动时启动服务类。因此,当服务启动时,它不会自动设置 MediaProjection 权限。

我在使用上面的代码重新启动后调用这个Service.class但它没有启动MediaProjection Service

0 投票
0 回答
753 浏览

android - 将媒体投影与媒体记录器一起使用会产生损坏的视频

我正在尝试使用在棒棒糖设备(android 5 及更高版本)上可用的媒体投影 api,现在我实现了在 android 中使用此 api 的两种方法:

第一种方式:

使用媒体编解码器和媒体复用器。

第二种方式

使用媒体记录器类。

我做了什么:

我使用了第一个媒体编解码器,它在不同的设备上运行良好,但是当我需要添加音频时问题就来了(看起来有点复杂)。

然后我尝试使用媒体记录器,因为其他一些人使用它并且添加音频似乎很简单,所以我做了这样的事情:

我是硬编码: width, height,frame rate并且bitrate因为我需要控制输出视频,因为视频往往会变大。

我的问题:

使用媒体记录器方法,我在测试 api 时意识到了一个问题,我使用了 2 个不同的设备(android 7 和 android 6),它们的屏幕密度不同,但它们的大小大致相同:

Android 7 设备(分辨率:720x1280):

我得到了完美的结果没问题(这个设备是更高分辨率的设备)。

Android 6 设备(分辨率:540x960):

我得到了一个奇怪的损坏输出视频,如果我录制一个白屏,我会得到一个带有紫色模糊内容的损坏视频,如果我录制一个蓝屏,我会得到一个带有绿色模糊内容的损坏视频。

问题:

虽然这些不会使用媒体编解码器发生,但我的问题是:

为什么使用媒体记录器会发生这种情况?

媒体录像机与媒体投影一起使用是否稳定?

谢谢。

0 投票
1 回答
2404 浏览

android - 使用 Media Projection API 在设备之间共享屏幕

我正在开发一个应用程序,它具有与其他应用程序共享屏幕的功能。

我为此使用了媒体投影 API。我还使用 MediaMuxer 来组合音频和视频输出以进行屏幕共享。

我知道 Media Projection API 用于屏幕录制,但我只想在录制时共享屏幕。

为此,我修改了 MediaMuxer 类的 writeSampleData 方法,以通过套接字将字节发送到网络上的其他设备。

下面是代码:

outStream = ScreenRecordingActivity.getInstance().socket.getOutputStream();

字节通过套接字成功传输,我也能够在接收器端接收这些字节。

下面是在接收端接收字节的代码:

我按照以下链接进行屏幕共享:

屏幕截图

屏幕录像机

使用 mediaProjection 进行屏幕录制

我使用上述示例中的一些代码来制作应用程序。

我只想知道如何在接收器处处理字节。如何格式化这些字节以从发送方播放实时流?

我是否遵循发送和接收字节数据的正确方法?

MediaProjection 是否允许在应用程序之间录制时流式传输屏幕?

任何帮助将不胜感激。

0 投票
0 回答
403 浏览

user-permissions - 通过 MediaProjection 进行 ScreenCapture,无需用户干预 Kiosk 应用程序 - Android

我在一家数字标牌公司工作,该公司的 Android 设备以 kiosk 模式运行。最近,我们想添加屏幕截图以进行调试。最简单的方法是使用

getWindow().getDecorView().getRootView().getDrawingCache()

创建位图并通过网络发送它,但这不会捕获视频,因为它已在表面视图中呈现。

MediaProjection 的 createVirtualDisplay 看起来很有希望,但使用此功能所需的明确许可是不可接受的。即使是第一次请求用户许可并将结果持久化以供进一步使用也是不可接受的,因为这会破坏现有的实现。

请帮我解决这个问题。

注意:那里的所有设备都已植根,或者我们的应用程序以设备所有者身份运行,并且 android 版本高于 4.4

0 投票
1 回答
162 浏览

android - Is there anyway to capture hardware accelerated views without using media projection API?

I am trying to get screenshot of an activity that contains hardware accelerated view's so , Is there a way to get a activity screenshot without using MediaProjection API or getting the hardware accelerated view's bitmap only ?

0 投票
0 回答
3440 浏览

android - 如何使用 MediaProjection 在服务中捕获屏幕?

众所周知,我们可以使用 Android MediaProjection API 在 Activity 中捕获屏幕,但我想在 Service 的线程中捕获屏幕。但是 Android Service 没有 MediaProjection 需要做的事情的 onActivityResult() 方法。看来我们只能像下面这样调用 MediaProjection API:

有没有办法在 Android 服务中使用 MediaProjection?

0 投票
2 回答
825 浏览

android - 如何将位图从 Activity 传递给服务

我正在 Android Studio 中编写一个小的 Android 程序,它使用 MediaProjection 来获取整个屏幕的屏幕截图,然后我想将该屏幕截图作为位图传递给我的系统叠加层(基于聊天头示例)。当 MediaProjection 运行并且 Imagereader 创建位图时,我将位图传递到一个类全局变量中,这样我就可以将它传递到我的 System Overlay 服务并显示它。我遇到了一个问题,当服务内的 Imageview 尝试读取 bmp 时,我收到如下错误:

据我了解,垃圾收集器很快就会吃掉传递的位图,当系统覆盖试图抓取它时,数​​据就消失了。有人可以为我指出如何保存位图的正确方向吗?

主要活动

服务

全局变量

0 投票
1 回答
355 浏览

android - 某些三星设备的屏幕录制输出失真

我正在尝试捕获 Android 设备屏幕的视频,但在某些三星设备上,我的视频被粉红色的失真覆盖覆盖。

检查以下三星 DOUS 和 Pixel XL 上的输出视频截图:

在三星 DUOS SM-G532F 上-Pixel XL 2(操作系统级别 27)

三星 DUOS G532F(API 23) - Pixel XL 2 (API 27)

这是我设置媒体记录器的方法

中使用的默认值recordingInfo

CamcorderProfile

我也尝试CamcorderProfile.QUALITY_HIGH了其他一些配置文件,结果相同

0 投票
0 回答
101 浏览

android - 应用程序未聚焦时,活动方法不起作用

我遇到了一个问题,我会很感激一些指导。我正在 Android Studio 中编写一个小型 Android 程序,它使用 MediaProjection 来获取整个屏幕的屏幕截图,然后我想将该屏幕截图作为位图传递给我的系统叠加层(基于聊天头示例)。当 MediaProjection 运行并且 Imagereader 创建位图时,我将位图传递到一个类全局变量中,这样我就可以将它传递到我的系统覆盖服务并显示它。我遇到的问题是,如果我“标记”到另一个应用程序,我的方法将停止从 MainActivity 工作。当我的应用程序处于焦点时,一切正常,当另一个应用程序被聚焦时,系统覆盖收缩并按其应有的方式扩展,但不再截取屏幕截图。我的理解是因为我的应用程序变成了“

我的代码可以在这里找到:https ://github.com/asheron21/FacebookLikeChathead

MainActivity:https ://github.com/asheron21/FacebookLikeChathead/blob/master/app/src/main/java/com/example/chatheads/MainActivity.java

服务:https ://github.com/asheron21/FacebookLikeChathead/blob/master/app/src/main/java/com/example/chatheads/ChatHeadService.java

全局变量:https ://github.com/asheron21/FacebookLikeChathead/blob/master/app/src/main/java/com/example/chatheads/Globals.java

谢谢!

0 投票
1 回答
663 浏览

java - 使用浮动小部件截取任何屏幕

我正在尝试使用浮动小部件截取屏幕截图。但我找不到任何这样做的方法。我搜索了 MediaProjection API,但找不到任何有用的东西。现在,如果我点击浮动小部件,它只会捕获浮动小部件的屏幕截图。

截图.java