精华内容
下载资源
问答
  • mac开发-10.15检测屏幕录制权限

    万次阅读 2019-10-23 20:04:01
    mac开发-10.15检测屏幕录制权限 在Mac os 10.15之后,屏幕录制权限需要获取才能正确录屏,否则只能录制桌面背景以及自身app的影响。即可以截屏,但截不到其他app的内容。

    在Mac os 10.15之后,屏幕录制权限需要获取才能正确录屏,否则只能录制桌面背景以及自身app的影像。即可以截屏,但截不到其他app的内容。

    屏幕录制权限检测

    对于Mac os 10.15的屏幕录制权限检测,使用如下方法为最佳:

    - (BOOL)canRecordScreen
    {
        if (@available(macOS 10.15, *)) {
            CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
            NSUInteger numberOfWindows = CFArrayGetCount(windowList);
            NSUInteger numberOfWindowsWithName = 0;
            for (int idx = 0; idx < numberOfWindows; idx++) {
                NSDictionary *windowInfo = (NSDictionary *)CFArrayGetValueAtIndex(windowList, idx);
                NSString *windowName = windowInfo[(id)kCGWindowName];
                if (windowName) {
                    numberOfWindowsWithName++;
                } else {
                    //no kCGWindowName detected -> not enabled
                    break; //breaking early, numberOfWindowsWithName not increased
                }
    
            }
            CFRelease(windowList);
            return numberOfWindows == numberOfWindowsWithName;
        }
        return YES;
    }
    

    另外一种方法是下面这种?,在权限没有设置的时候没问题,但是在权限设置后,会导致mac os 10.15下的系统崩溃,直接回到登陆界面。所以没有使用这个

    - (BOOL)canRecord{
        CGDisplayStreamRef stream = CGDisplayStreamCreate(CGMainDisplayID() , 1, 1, kCVPixelFormatType_32ABGR, nil, ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef  _Nullable frameSurface, CGDisplayStreamUpdateRef  _Nullable updateRef) {
            
        });
        
        BOOL canRecord = stream != NULL;
        if (stream) {
            CFRelease(stream);
        }
        
        NSLog(@"canRecord : %ld",canRecord);
        return canRecord;
    }
    

    屏幕录制授权申请

    通过截屏都可以向系统获取权限

    CGWindowListCreateImage

    - (void)showScreenRecordingPrompt{
      
      /* macos 10.14 and lower do not require screen recording permission to get window titles */
      if(@available(macos 10.15, *)) {
        /*
         To minimize the intrusion just make a 1px image of the upper left corner
         This way there is no real possibilty to access any private data
         */
        CGImageRef c = CGWindowListCreateImage(
                                                        CGRectMake(0, 0, 1, 1),
                                                        kCGWindowListOptionOnScreenOnly,
                                                        kCGNullWindowID,
                                                        kCGWindowImageDefault);
      
          CFRelease(screenshot);
    
    }
    

    截取主屏幕全部的内容

    CGRect mainRect = CGDisplayBounds(CGMainDisplayID());
    CGImageRef desktopImage = CGWindowListCreateImage(mainRect, kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageBestResolution | kCGWindowImageShouldBeOpaque);
    NSImage* image = [[NSImage alloc]initWithCGImage:desktopImage size:_screenAsBtn.frame.size];
    CGImageRelease(desktopImage);
    

    截取某个子程序的图片

    [_windowList removeAllObjects];
    CFArrayRef windowListArray = CGWindowListCreate(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
    NSArray *windows = CFBridgingRelease(CGWindowListCreateDescriptionFromArray(windowListArray));
    for(NSMutableDictionary* dic in windows){
        NSString* layerStr = [dic objectForKey:(__bridge id)kCGWindowLayer];
        CGRect bounds;
        CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)[dic objectForKey:@"kCGWindowBounds"], &bounds);
        NSRectFromCGRect(bounds);
        if ([layerStr intValue] == 0 &&(bounds.size.width>10 && bounds.size.height>10)) {
            [_windowList addObject:dic];
        }
    }
    CFRelease(windowListArray);
    //下面是for循环中内容,取每张图片
    NSMutableDictionary* entry = [_windowList objectAtIndex:i];
    int ownerPID = [[entry objectForKey:(__bridge id)kCGWindowNumber] intValue];
    NSString* name =[entry objectForKey:(__bridge id)kCGWindowName];
    
    NSString* owerName = [entry objectForKey:(__bridge id)kCGWindowOwnerName];
    CGImageRef imageRef = CGWindowListCreateImage(CGRectNull,  kCGWindowListOptionIncludingWindow, ownerPID, kCGWindowImageShouldBeOpaque);
    NSImage* image = [[NSImage alloc]initWithCGImage:imageRef size:NSZeroSize];
    CGImageRelease(imageRef);
    

    隐私页面跳转

    - (void)openSetting{
        NSString *urlString = @"x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture";
        [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]];
    }
    

    清除某个App的权限记录

    使用tccutil reset All com.xxx.xxx来清除,com.xxx.xxx为bundle id


    清除某个隐私权限的全部内容

    重置摄像头访问: tccutil reset Camera
    重置麦克风访问: tccutil reset Microphone
    重置屏幕录制:tccutil reset ScreenCapture


    遇到的问题

    遇到权限一直要获取,获取后提示关闭该程序,进入程序后,又需要获取的死循环。
    这里我重启mac就好了,不知道是10.15系统原因否。


    参考文章:
    1.https://blog.csdn.net/lovechris00/article/details/96979960
    2.https://xbuba.com/questions/56597221

    展开全文
  • Android音频录制权限申请

    万次阅读 2018-03-23 12:56:48
    最近捣鼓录音小程序,发现很多晚上的demo 都不能运行成功,细看log发现是权限申请在Android版本中有所不同,在6.0.之后似乎需要我们动态的去通过用户是否给予权限而获得我们需要的权限。声明需要的权限,然后再需要...

    最近捣鼓录音小程序,发现很多晚上的demo 都不能运行成功,细看log发现是权限申请在Android版本中有所不同,在6.0.之后似乎需要我们动态的去通过用户是否给予权限而获得我们需要的权限。


    声明需要的权限然后再需要到activity里调用动态的申请,让用决定是否给你相关权限,

    函数如下:

    先是要定义如下的以下变量,当然了,你直接写也是没毛病滴。以此类推各类在Android6.0之后的改变都需要这样去申请。

       //申请录音权限
        private static final int GET_RECODE_AUDIO = 1;
        private static String[] PERMISSION_AUDIO = {
                Manifest.permission.RECORD_AUDIO
        };

        /*
        * 申请录音权限*/
        public static void verifyAudioPermissions(Activity activity) {
            int permission = ActivityCompat.checkSelfPermission(activity,
                    Manifest.permission.RECORD_AUDIO);
            if (permission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, PERMISSION_AUDIO,
                        GET_RECODE_AUDIO);
            }
        }
    当然了,代码肯定不止这一种实现方式,但这种方式肯定行。
    展开全文
  • 主要介绍了Android5.1 取消录制屏幕跳出的权限对话框问题,需要的朋友可以参考下
  • 遇到问题:安装软件需要获取截屏和屏幕录制的功能权限,但是发现打开系统设置->安全性与隐私-屏幕录制,右边竟然没有可勾选或可添加的App选项 产生原因:经过网络搜索关键字,发现是因为系统升级到10.5,...

    遇到问题:

    安装软件需要获取截屏和屏幕录制的功能权限,但发现打开系统设置->安全性与隐私-屏幕录制,右边竟然没有可勾选或可添加的App选项

    产生原因:

    经过网络搜索关键字,发现是因为系统升级到10.5,Mac CataLina过程中位于/Library/Application Support/com.apple.TCC目录下的TCC.db文件损坏了。
    期间遇到的错误提示(Error: table access has 7 columns but 12 values were supplied)

    解决办法:

    第一步:关闭SIP功能
    1.重启电脑,进入恢复模式(电脑启动时按住CMD + R,直到看到Apple徽标为止)

    2.转到顶部菜单,选择实用程序,然后选择终端。

    3.使用以下命令关闭SIP:    

    csrutil disable

    4.转到顶部菜单,然后选择“ Apple徽标”和“重新启动”。

    第二步:修复系统的TCC.db文件
    在终端中敲下如下命令

    sudo chmod 777 /Library/Application\ Support/com.apple.TCC
    
    sudo rm -rf /Library/Application\ Support/com.apple.TCC/TCC.db

    第三步:在TCC.db文件中插入字段 或者打开对应软件后此处为OBS Studio会提示需要屏幕录制权限 选给权限即可
    字段的区别就是App的BundleID 以及最后一位的数字可以打开应用显示包内容,在Info.plist中能找到如com.tencent.xinWeChat就是微信的BundleID
    最后一位的数字 应该是在TCC.db中能看到的 具体查看方式可以研读下How To Edit The SIP Protected TCC.db File On macOS Sierra 10.12.2 And Later https://hcsonline.com/images/PDFs/How_To_Edit_The_SIP_Protected_TCC.db_File_On_macOS_Sierra_10.12.2_And_Later.pdf

    微信 sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceScreenCapture','com.tencent.xinWeChat',0,1,1,NULL,NULL,NULL,'UNUSED',NULL,0,1585206453);"

    QQ sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceScreenCapture','com.tencent.qq',0,1,1,NULL,NULL,NULL,'UNUSED',NULL,0,1585206581);"

    腾讯会议 sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceScreenCapture','com.tencent.meeting',0,1,1,NULL,NULL,NULL,'UNUSED',NULL,0,1585206926);"

    参考以下文章,感谢!

    [1]https://discussionschinese.apple.com/thread/251243787
    [2]https://blog.csdn.net/dangai0201/article/details/104248535
    [3]https://blog.csdn.net/qq_40673345/article/details/104272552

    展开全文
  • LoadRunner11录制无法打开IE的解决办法

    千次阅读 2014-07-30 10:16:15
    如果你确认以上信息,则开始解决LR11录制无法打开IE的情况(以下有网上总结和自己总结的内容,我的环境是WIN7 32+IE8+LR11) 1、  当你安装多浏览器时 : 请设置IE为默认浏览器,打开IE选项---高级--去掉...

    先确认你的安装环境:

    1、确定安装以下组件,运行LR11安装包,没有提示组件安装,直接进入欢迎安装界面,则以下组件均已安装

    •.NET Framework 3.5 SP1

    •Microsoft Data Access Components (MDAC) 2.8 SP1 (or later)

    •Microsoft Windows Installer 3.1

    •Microsoft Core XML Services (MSXML) 6.0

    •Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)

    •Microsoft Visual C++ 2008 Redistributable Package (x86)

    •Web Services Enhancements (WSE) 2.0 SP3 for Microsoft .NETRedistributable Runtime MSI

    •Web Services Enhancements (WSE) 3.0 for Microsoft .NETRedistributable Runtime MSI

    •Strawberry Perl 5.10.1

    2、系统:如果你的系统不是以下系统,LR11可能无法安装或正常运行

    •Windows Vista SP2 32-Bit

    •Windows XP Professional SP3 32-Bit

    •Windows Server 2003 Standard Edition/Enterprise Edition SP2 32-Bit

    •Windows Server 2008 Standard Edition/Enterprise Edition SP2 32-Bitand 64-bit

    •Windows 7

    3、浏览器:LR11支持以下浏览器

    •Microsoft Internet Explorer 6.0 SP1 or SP2

    •Microsoft Internet Explorer 7.0

    •Microsoft Internet Explorer 8.0

    4、vista和win7安装、破解和运行要以管理员身份运行程序

    5、安装前请完全关闭杀毒软件和防火墙

    6、Windows Server 2003带HASP插件,需要下载最新的HASP驱动程序

     

    如果你确认以上信息,则开始解决LR11录制无法打开IE的情况(以下有网上总结和自己总结的内容,我的环境是WIN7 32+IE8+LR11)

    1、  当你安装多浏览器时

    请设置IE为默认浏览器,打开IE选项---高级--去掉“启用第三方浏览器扩展(需要重启动)”的勾选。以上操作以管理员权限运行。如果不行,就卸载其他浏览器只留下IE

    注:我是chrome 20和IE,卸载了chrome还是不行

    2、  重新注册LR

    重新运行“register_vugen.bat”(位置\Program Files\Mercury\LoadRunner\bin)

    注:这个是LR8的,LR10和LR11应该没有这个文件,所以就不用找了

    3、  Windows2003禁用数据保护:

    “我的电脑”右键“属性”—>“系统属性”—>“高级”选项卡—>性能里,点击“设置”—>性能选项,切换到数据执行保护—>选择“除所选之外,为所有程序和服务启用数据执行保护”,添加IE执行文件,确定。

    注:win7和XP似乎应该不用改这个,改了应该也没什么效果,反正我没试

    4、 关闭自动关联

    录制脚本前关闭工具的自动关联功能,因为有时LR自动关联出的信息是错误的,这样脚本一旦出错,你不方便查找,在recording options(Ctrl+F7)中取消correlation的所有选项,如果需要关联,就采用手动关联。

    5、 添加信任站点

    添加录制脚本的网址为可信任站点

    6、 关闭防护软件

    安装、破解和运行时,关闭360安全卫士和360杀毒

    注:我没装,所以排除了这个可能

    7、 更改录制地址

    被测试系统在本机上,访问地址为:http://127.0.0.1:Port/程序名称,需要将URL改为:http://localhost:Port/程序名称,这样就可以产生脚本了。

    8、 卸载迅雷

    卸载掉迅雷后重新系统

    注:为什么我也不知道,可能是IE的迅雷控件搞的鬼,反正试试也不废RP

    9、 64位WIN7系统要注意IE安装路径。选择注册表中应用的IE路径,才能正确打开

    展开全文
  • katalon执行录制脚本无法打开浏览器

    千次阅读 2019-08-02 21:21:15
    录制了测试脚本,但是执行时候会报错. at com.kms.katalon.core.webui.keyword.internal.WebUIKeywordMain.stepFailed(WebUIKeywordMain.groovy:6... 排查几个小时.最终想起来katalon所在全路径有中文. 换到一个全...
  • 开发过程中,在做到录制视频的功能点的时候,当按住按钮进行录制的时候回弹出权限提醒框,从而抢夺了焦点,导致功能不能正常显示。在网上找了一些办法,说是可以判断某些权限是否已经开启。那个亲自尝试了下,没有...
  • 这是MP3录制和显示声音波形的一个故事。
  • 相关的最小录制时间,最大录制时间,我们老板说了,微信只能录6秒,那咱们也要录6秒。时间短了就算没录上。好吧,加了两个限制参数就ok了。当然还要能手动取消录制啊。这个需要在onTouch的事件中做处理了。当然还要...
  • 录制屏幕时总是跳出一个对话框让确定是否录制,总是会引起不必要的麻烦,于是找到启动获取屏幕信息的代码Intent captureIntent = mMediaProjectionManager.createScreenCaptureIntent(); startActivityForResult...
  • 首先感谢大佬完整的录制wav音频工程 https://www.cnblogs.com/Amandaliu/archive/2013/02/04/2891604.html 公司要求: 紧接着自己按照要求去实现,代码走道如下流程的时候发生了异常: public int ...
  • MP3 音频录制,支持类似 IOS 原生的单边或者双边波形显示,低版本音频权限兼容,本地或者在线音频播放支持。
  • Qt for ios 打开相机(添加权限

    千次阅读 2018-11-25 17:30:15
    相机权限:Privacy - Camera Usage Description 允许此权限才能使用相机功,这样才能录制视频,并且想要保存图片。 相册权限:Privacy - Photo Library Usage Description 允许此权限才能使用系统相册。 麦克风...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,423
精华内容 7,769
关键字:

录制权限怎么打开