Android14中MediaProjection单应用录制能否录制自身?求助
Android 14 MediaProjection单个应用录制自身不显示的解决方案
问题描述
在Android 14中使用MediaProjection的「单个应用」选项录制发起录制的应用自身时,在createScreenCaptureIntent流程的第二步选择录制应用列表中看不到自身应用,日志出现报错:
ChooserActivity E Failed to get target intent filter: intent data and type are null
已知XRecorder应用可正常实现自身录制,当前manifest.xml代码如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" /> <uses-permission android:name="Manifest.permission.POST_NOTIFICATIONS"/> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.ScreenRecorderExample" tools:targetApi="34"> <activity android:name=".activity.MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".service.MediaProjectionService" android:foregroundServiceType="mediaProjection" android:exported="false" android:enabled="true"> </service> </application> </manifest>
问题原因
Android 14针对单个应用录制的场景,要求目标应用的可启动Activity必须声明android.intent.action.SCREEN_CAPTURE_TARGET的Intent Filter,系统的应用选择器会通过这个Filter识别哪些应用支持被单个录制。你的应用主Activity缺少这个Filter,导致系统无法将其纳入可选列表,同时触发日志中的报错。
解决方案
在主Activity的配置中添加SCREEN_CAPTURE_TARGET对应的Intent Filter,修改后的Activity代码如下:
<activity android:name=".activity.MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 新增单个应用录制的目标识别Filter --> <intent-filter> <action android:name="android.intent.action.SCREEN_CAPTURE_TARGET" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
补充说明
- 必须保证Activity的
android:exported属性为true,否则系统无法读取该Intent Filter; - XRecorder等可实现自身录制的应用,均已在其可启动Activity中声明了上述Filter;
- 修改后重新编译安装应用,即可在单个应用录制的选择列表中看到自身应用。
内容的提问来源于stack exchange,提问作者Luka Zdjelar
相关产品推荐
相关产品推荐

