×
Namespaces

Variants
Actions

监听存储卡插入/移除事件

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

代码示例
文章
翻译:
chenziteng
最后由 hamishwillee 在 30 May 2013 编辑

关键字: RFs NotifyChange ENotifyDisk Volume


Contents

概述

本文描述了如果在应用程序中监听存储卡插入/移除事件。 应用程序可以通过RFs::NotifyChange(ENotifyDisk, ...)方法获取存储卡插入/移除的通知。


方案

将应用程序设置成系统应用

一般应用程序会在存在卡移除后被强制关闭,为了能监听存储卡插入/移除事件,必须将应用程序设置成系统应用。

将以下代码添加到AppUI类的ConstructL()方法中.

	CEikonEnv::Static()->SetSystem( ETrue ); // 存储卡被移除时不要关闭本应用程序
 
iDiskDetector = CDiskDetector::NewL(*this, iCoeEnv->FsSession());
iDiskDetector->Start();

应用程序获取通知

为了获取通知,应用程序需要添加以下代码:

iFs.NotifyChange(ENotifyDisk, iStatus);   

NotifyChange() 是一个异步方法,它请求的服务在存储卡状态发生变化时完成。因此以上代码应该封装在一个活动对象中,例如:

void CDiskDetector::Start()   
{
Cancel();
iFs.NotifyChange(ENotifyDisk, iStatus);
SetActive();
}


该活动对象的RunL()方法可以这样实现:

void CDiskDetector::RunL()   
{
TInt err = iStatus.Int();
if(err!=KErrCancel)
{
iObserver.NotifyDiskChange();
}
}

检测存储卡是否可用

当存储卡被插入/移除时,该活动对象调用监听者的NotifyDiskChange方法。在该方法中监听者用RFs::Volume()方法检查存储卡是否可用。

void CHelloWorldAppUi::NotifyDiskChange()   
{
iDiskDetector->Start();
 
TVolumeInfo vol;
TInt err = iCoeEnv->FsSession().Volume(vol, EDriveE);
if(err==KErrNone)
{
// 存储卡可用
}
else // 一般来说错误码是KErrNotReady
{
// 存储卡不可用
}
}

源代码

以下是完整的示例程序 (代码已经在一台S60第五版的机器上验证通过):

HelloWorld(DiskChange).zip


相关文档:

TSS000794 - Monitoring MMC insertion / removal events

This page was last modified on 30 May 2013, at 07:42.
66 page views in the last 30 days.
×