我对在Mac上开发应用程序是完全陌生的。在这里,我只使用Qt开发了2-3个应用程序,没有一个使用objective/ cocoa。
是否有一种方法可以检测SD卡何时插入Qt 4(特别是4.8)中的mini (OS )?
我在网络上搜索了很多,也在堆栈溢出上搜索了很多--一些结果--但都是针对Android和Windows的--与Mac( mini )无关。
到目前为止,我发现了这个:
我想检测什么时候SD卡已经插入,然后我想显示我的应用程序,获得一些输入,并将选定的文件从卡到本地磁盘。
很明显,一切都很简单--仅仅是检测卡和显示应用程序(从托盘或最小化状态)是非常重要和困难的部分。
如果你能给我指明正确的方向,我会非常感激的。
提前谢谢!!
更新:
我进一步研究发现:
udev(libudev)来实现这样的目标。use the diskutil activity command to continuously monitor disks being mounted or ejected建议的答案。
我发现了一些非常类似的这里和这里,但是对于使用udev规则的Linux:(diskutil plist和IOKit(DiskArbitration)必须成为我所寻求的解决方案的一部分
launchd plist和Lingon现在..。我比昨天有更多的东西,但我仍然需要帮助把所有这些放在一起,并在一个Qt应用程序中使用。我会非常感激有人指引我到最后的结果。如果我真的能创造一些有用的东西的话,我将继续做这件事,并更新。
谢谢!)
发布于 2013-01-20 10:07:30
我认为您需要创建一个使用发射剂来监视正在挂载的新磁盘的DiskArbitration框架。当用户登录时,此代理将被设置为在后台运行。当您的助手检测到一个新磁盘被挂载时,它可以检查表示磁盘的DADiskRef的属性,以确定它是否对您的应用程序感兴趣。如果是,则可以使用LaunchServices API启动应用程序面向用户的部分。
使用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返回的字典包含许多属性,您可能会发现这些属性在确定新安装的磁盘是否感兴趣方面很有用,包括媒体是否可移动、可弹出等等。
https://stackoverflow.com/questions/14329114
复制相似问题