×
Namespaces

Variants
Actions

Monitorando eventos de inserção/remoção de cartões de memória

From Nokia Developer Wiki
Jump to: navigation, search

Archived.pngAquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.

Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)

Article Metadata

Exemplo de código
Artigo
Palavras-chave: RFs NotifyChange ENotifyDisk Volume
Tradução:
Por ivocalado
Última alteração feita por lpvalente em 02 Dec 2012

Contents

Introdução

Este artigo mostra como uma aplicação pode monitorar o processo de inserção e remoção de cartões de memória.

Aplicações podem ser notificadas sobre a inserção ou remoção de cartões de memória usando o método RFs::NotifyChange(ENotifyDisk, ...).

Solução

Convertendo a aplicação para uma aplicação do sistema

De modo a possibilitar a recepção de eventos de inserção e remoção de cartões memória, a aplicação de interface de usuário deve ser tornada uma aplicação do sistema de forma a evitar que ela seja finalizada quando o cartão de memória for removido.

Adicione o seguinte ao método ConstructL da classe AppUI..

	CEikonEnv::Static()->SetSystem( ETrue ); // don't close me when the memory card is removed
 
iDiskDetector = CDiskDetector::NewL(*this, iCoeEnv->FsSession());
iDiskDetector->Start();

Adicionar um notificador à aplicação

De modo a receber os eventos, um notificador precisa ser adicionado à aplicação. Isto pode ser feito chamando o seguinte trecho de código.

iFs.NotifyChange(ENotifyDisk, iStatus);   

NotifyChange() é um método assíncrono que é finalizado quando a disponibilidade do cartão de memória é alterada. O trecho de código abaixo deve ser implementado em uma classe derivada de CActive, tais como:


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


O método RunL() do objeto ativo pode ser implementado como segue:

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

Verificação cartão de memória

Quando o cartão de memória é inserido / removido, o notificador / observador gera um evento do tipo NotifyDiskChange. Dentro deste manipulador de eventos, o observador pode verificar a disponibilidade do cartão de memória usando RFs::Volume, como segue:

void CHelloWorldAppUi::NotifyDiskChange()   
{
iDiskDetector->Start();
 
TVolumeInfo vol;
TInt err = iCoeEnv->FsSession().Volume(vol, EDriveE);
if(err==KErrNone)
{
// the memory card is available
}
else // generally the err should be KErrNotReady
{
// the memory card is NOT available
}
}

Código fonte

Você pode efetuar o download de um exemplo completo do programa aqui. O código foi testado em um dispositivo S60 quinta edição.

Artigo relacionado:

Monitoramento MMC para eventos de inserção / remoção(Inglês)

This page was last modified on 2 December 2012, at 01:25.
108 page views in the last 30 days.