gpt4 book ai didi

macos - Qt 4.8 - 在 mac-mini (OS X Lion) 上检测 SD 卡的插入和移除

转载 作者:行者123 更新时间:2023-12-03 23:44:04 24 4
gpt4 key购买 nike

我对在 Mac 上开发应用程序完全陌生。在这里,我仅使用 Qt 开发了 2-3 个应用程序,而没有使用 Objective-c/cocoa/xcode 开发。

有没有办法检测何时在 Qt 4(特别是 4.8)的 Mac mini(OS X Lion)中插入 SD 卡?

我(重新)在网络和 stackoverflow 上进行了大量搜索 - 并且出现了一些结果 - 但都是针对 Android 和 Windows - 与 Mac(迷你 OS X Lion)无关。

直到现在我发现了这个:

  • 在 Mac (mini) 上,读卡器就像任何其他 USB 设备一样处理
  • 我也发现了这个 example在 Mac 开发人员库中。我希望所有人都可以访问此链接。
    这个例子......“演示了当 USB 设备连接到系统或从系统移除时,使用 IOKitLib 和 IOUSBLib 来设置异步回调”。因此是可以实现的。
    我想在 Qt 中做同样的事情。

  • 我想检测何时插入了 SD 卡,然后我想显示我的应用程序,获取一些输入并将所选文件从卡移动到本地磁盘。
    显然,一切都很简单 - 只是检测卡并显示应用程序(从托盘或最小化状态)是重要且困难的部分。

    如果您能指出我正确的方向,我将不胜感激。
    提前致谢!!

    更新:
    我进一步研究并发现:
  • 在 Linux 上我们可以使用 udev(libudev)实现这样的事情。
  • 但后来我发现 udev is Linux specific and won't find that in OS X .答案here建议到 use the diskutil activity command to continuously monitor disks being mounted or ejected .我发现了一些非常相似的东西 herehere但是对于使用 udev 规则的 Linux : (
  • 最新且看似最相关的发现是:
  • diskutil plistIOKit(DiskArbitration)必须成为我寻求的解决方案的一部分
  • 最后,here我发现了 launchd plistLingon

  • 现在...我有比昨天更多的东西,但我仍然需要帮助将所有这些放在一起并在 Qt 应用程序中使用它。我非常感谢有人指导我获得最终结果。如果我真的可以创造一些有用的东西,我会继续努力并更新。

    提前致谢!! :)

    最佳答案

    我认为您需要创建一个 launch agent使用 DiskArbitration framework监视正在安装的新磁盘。当用户登录时,此代理将设置为在后台运行。当您的助手检测到新磁盘已安装时,它可以检查 DADiskRef 的属性。代表磁盘以决定它是否对您的应用程序感兴趣。如果是,那么它可以使用 LaunchServices 启动您的应用程序的面向用户的部分。蜜蜂。

    使用 DiskArbitration 注册磁盘挂载事件的代码草图如下:

    #include <Foundation/Foundation.h>
    #include <DiskArbitration/DiskArbitration.h>

    static void diskAppearedCallback(DADiskRef disk, void* context)
    {
    CFDictionaryRef description = DADiskCopyDescription(disk);
    NSLog(@"Disk appeared: %@", description);
    CFRelease(description);
    }

    int main(int argc, char **argv)
    {
    DASessionRef session = DASessionCreate(kCFAllocatorDefault);
    DARegisterDiskAppearedCallback(session, kDADiskDescriptionMatchVolumeMountable, diskAppearedCallback, 0);
    DASessionScheduleWithRunLoop(session, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);

    CFRunLoopRun();

    return 0;
    }
    DADiskCopyDescription返回的字典包含许多属性,您可能会发现这些属性在确定新安装的磁盘是否有用时很有用,包括介质是否可移动、可弹出等。

    关于macos - Qt 4.8 - 在 mac-mini (OS X Lion) 上检测 SD 卡的插入和移除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14329114/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com