首页 > 其他分享 >Android高通 12/13 录屏流程代码位置

Android高通 12/13 录屏流程代码位置

时间:2024-05-31 18:02:39浏览次数:23  
标签:13 12 userContext RecordingService recording start 录屏 PendingIntent

 需求如下图 实现系统录屏功能 

frameworks/base/packages/SystemUI/src/com/android/systemui/screenrecord

涉及代码

ScreenRecordDialog # startBtn

RecordingService # start # end 

ScreenMediaRecorder.java

1、点击开始录屏frameworks/base/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java

 startBtn.setOnClickListener(v -> {
            if (mOnStartRecordingClicked != null) {
                // Note that it is important to run this callback before dismissing, so that the
                // callback can disable the dialog exit animation if it wants to.
                mOnStartRecordingClicked.run();
            }

            requestScreenCapture();
            dismiss();
        });

2、ScreenRecordDialog #requestScreenCapture核心代码实现功能 

private void requestScreenCapture() {
        Context userContext = mUserContextProvider.getUserContext();
        ScreenRecordingAudioSource audioMode = mAudioSwitch.isChecked()
                ? (ScreenRecordingAudioSource) mOptions.getSelectedItem()
                : NONE;
        PendingIntent startIntent = PendingIntent.getForegroundService(userContext,
                RecordingService.REQUEST_CODE,
                RecordingService.getStartIntent(
                        userContext, Activity.RESULT_OK,
                        audioMode.ordinal()),
                PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
        PendingIntent stopIntent = PendingIntent.getService(userContext,
                RecordingService.REQUEST_CODE,
                RecordingService.getStopIntent(userContext),
                PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
        mController.startCountdown(DELAY_MS, INTERVAL_MS, startIntent, stopIntent);
    }
}

3、RecordingService 中实现开始录屏功能 代码如下图所示

 case ACTION_START:
                mAudioSource = ScreenRecordingAudioSource
                        .values()[intent.getIntExtra(EXTRA_AUDIO_SOURCE, 0)];
                Log.d(TAG, "recording with audio source" + mAudioSource);

                mRecorder = new ScreenMediaRecorder(
                        mUserContextTracker.getUserContext(),
                        currentUserId,
                        mAudioSource,
                        this
                );

                if (startRecording()) {
                    updateState(true);
                    createRecordingNotification();
                    mUiEventLogger.log(Events.ScreenRecordEvent.SCREEN_RECORD_START);
                } else {
                    updateState(false);
                    createErrorNotification();
                    stopForeground(true);
                    stopSelf();
                    return Service.START_NOT_STICKY;
                }
                break;

4、ScreenMediaRecorder 调用start方法开始录屏 

  * Start screen recording
    */
    void start() throws IOException, RemoteException, RuntimeException {
        Log.d(TAG, "start recording");
        prepare();
        mMediaRecorder.start();
        recordInternalAudio();
    }

5、ScreenMediaRecorder停止录屏 调用代码路径 

/**
     * End screen recording
     */
    void end() {
        mMediaRecorder.stop();
        mMediaRecorder.release();
        mInputSurface.release();
        mVirtualDisplay.release();
        mMediaProjection.stop();
        mMediaRecorder = null;
        mMediaProjection = null;
        stopInternalAudioRecording();

        Log.d(TAG, "end recording");
    }

到这里基本结束了,转载请注明出处Android高通 12/13 录屏流程代码位置-CSDN博客,谢谢!

标签:13,12,userContext,RecordingService,recording,start,录屏,PendingIntent
From: https://blog.csdn.net/qq_15950325/article/details/139357782

相关文章

  • CSP历年复赛题-P1980 [NOIP2013 普及组] 计数问题
    原题链接:https://www.luogu.com.cn/record/160821231题意解读:统计1~n中x的个数。解题思路:枚举每个数,提取每一位,判断是否等于x。100分代码:#include<bits/stdc++.h>usingnamespacestd;intn,x,ans;intmain(){cin>>n>>x;for(inti=1;i<=n;i++)......
  • CSP历年复赛题-P1078 [NOIP2012 普及组] 文化之旅
    原题链接:https://www.luogu.com.cn/problem/P1078题意解读:1~n个国家,每个国家有自己的文化,不同国家文化可以相同,要从起点遍历到终点,已经学习过的文化不能重复学习,已经学习过的文化被某个文化歧视的国家也不能遍历,且不同国家之间有边,边有不同的距离,计算从起点到终点的最短路径。解......
  • 123. 连续子数组最大和(卡码网周赛第十九期)
    123.连续子数组最大和(卡码网周赛第十九期(23年小红书提前批笔试真题))题目描述小红拿到了一个数组,她希望进行最多一次操作:将一个元素修改为x。小红想知道,最终的连续子数组最大和最大是多少?输入第一行输入一个正整数t,代表询问次数。对于每次询问,输入两行:第一行输入两......
  • 【二叉树】Leetcode 129. 求根节点到叶节点数字之和【中等】
    求根节点到叶节点数字之和给你一个二叉树的根节点root,树中每个节点都存放有一个0到9之间的数字。每条从根节点到叶节点的路径都代表一个数字:例如,从根节点到叶节点的路径1->2->3表示数字123。计算从根节点到叶节点生成的所有数字之和。叶节点是指没有......
  • ZCMU-1120
    就这样#include<cmath>#include<cstdio>#include<iostream>usingnamespacestd;intmain(){inti,k,sum;while(~scanf("%d",&k)){i=0,sum=0;k=abs(k);//前面设置成0的所以//先加后用while(+......
  • 扫黑·决不放弃迅雷BT完整下载资源[HD-1280P/3.25GBMKV中字]4k资源分享
    电影《扫黑·决不放弃》是一部以真实事件为背景的警匪题材电影,以纪实的手法讲述了一群警察与黑恶势力的博弈和抗争。该电影在上映后引发了广泛的关注和讨论,不仅展现了中国公安机关对黑恶势力的坚决打击态度,更让观众深刻认识到了黑恶势力对社会的危害以及警察们为维护社会安定......
  • 谈判专家迅雷BT下载[WAV/2.12GB/5.36GB]高清版画质[HD720p/1080p]
    电影《谈判专家》是一部以谈判为主题的悬疑犯罪片。该片由中国导演导演,于年上映。本片以充满智慧和心计的谈判专家为主角,讲述了他在一场看似无解的罪案谈判中的精彩对决。这部电影引人入胜、紧张刺激,给观众们带来了一场智力与才智之间的较量。 电影中的主角是一位......
  • AP3213 降压恒压恒流BUCK控制器
    产品描述AP3214是一系列外围电路简洁的宽输入电压降压BUCK恒压恒流驱动器,适用于8-100V输入电压范围的DC-DC降压应用。AP3214输出电压通过FB管脚设置,输出电流通过CS电阻设置,外围简洁,具备高效率,低功耗,低纹波,优异的线性调整率和负载调整率等优点。支持输出线损补偿......
  • AP3213降压恒压恒流BUCK控制器
    产品描述AP3213是一系列外围电路简洁的宽输入电压降压BUCK恒压恒流驱动器,适用于8-60V输入电压范围的DC-DC降压应用。AP3213输出电压通过FB管脚设置,输出电流通过CS电阻设置,外围简洁,具备高效率,低功耗,低纹波,优异的线性调整率和负载调整率等优点。支持输出线损补......
  • ubuntu20.04跑通slambook2 ch13编译
    这里记录如何跑通slambook2ch13的代码1.依赖说明在原书代码的3rdparty下大部分的依赖,只需要对每一个库源码安装即可,在CMakeists.txt目录下打开命令行输入:mkdirbuildcdbuildcmake..makesudomakeinstall但sophus和opencv比较麻烦,单独拿出来讲一下。2.sophus安装3r......