Bonjour et problème de lettre de lecteur
| Tue, 2005-03-29 14:14 | |
|
Bonjour, Je viens de m'inscrire sur NewLC alors je garde mon premier post pour le french corner ... Bon, mon problème: Je porte sous Symbian6.1/Series60 une appli que j'ai développée avec symbian7/UIQ2 (P800 et P910i) et portée depuis sous MIDP2. C'est une application qui doit émettre un son d'alarme. Pour plus de portabilité, cette alarme est stockée dans un fichier alarm.wav, installée comme suit dans le .pkg: Code: "..\data\Alarm.wav"-"!:\system\apps\monAPP\Alarm.wav" C'est à dire que c'est l'utilisateur qui va choisir de l'emplacement effectif du fichier sur le téléphone (c: ou e:, etc ...) Avec Symbian7/UIQ, pour "jouer" cette alarme, j'utilisais le code suivant: Code: _LIT(wavname, "\\system\\apps\\monAPP\\Alarm.wav"); iAlarmPlayer étant un CQikSoundPlayer*iAlarmPlayer->StartPlayL(wavname); Qui permet de s'affranchir de savoir sur quel "disque" se trouve le fichier. Sous Symbian6.1/Series60, j'utilise un CMdaAudioPlayerUtility*, de la façon suivante: Code: _LIT(wavname, "e:\\system\\apps\\monAPP\\Alarm.wav"); m_Player = CMdaAudioPlayerUtility::NewFilePlayerL(wavname, m_PlayerObserver); Le problème c'est que si j'enlève le e: ou si je le remplace par !: ou *:, j'obtiens un "system error". Alors, comment éviter de lui donner la lettre de lecteur ? Suis je obligé de passer par une detection du chemin d'installation ? Je précise au passage que je ne veux pas d'un chemin absolu dans le .pkg Merci (et bonjour), a+ Xavier Garreau |
|






Forum posts: 8
Je peux utiliser aussi le forum Symbian C++ pour avoir une réponse ?
a+
Xavier Garreau
Forum posts: 8
parser.Set(Application()->AppFullName(), NULL, NULL);
TPtrC ptrDP = parser.DriveAndPath();
_LIT(KWavName, "Alarm.wav");
HBufC* tmpStr = HBufC::NewLC(ptrDP.Length()+KWavName().Length());
TPtr pTmpStr(tmpStr->Des());
pTmpStr = ptrDP;
pTmpStr.Append(KWavName);
m_Player = CMdaAudioPlayerUtility::NewFilePlayerL(*tmpStr, m_PlayerObserver);
CleanupStack::PopAndDestroy();
a+
Xavier Garreau
Forum posts: 1918
{
TParse parser;
parser.Set(aFileName,NULL,NULL);
RFs fs;
fs.Connect();
CleanupClosePushL(fs);
TFindFile finder(fs);
finder.FindByDir(parser.NameAndExt(),parser.DriveAndPath());
aFullName.Copy(finder.File());
CleanupStack::PopAndDestroy(); // fs
}
Appelle cette proc avec ton path ("\\system...") et tu récupèreras en sortie un chemin complet vers ton fichier pour le passer au player.
Eric Bustarret
NewLC Founder & CEO / Professional Symbian OS Consultant
Forum posts: 8
Merci quand même ... Mais pour prendre un parrallèle avec de la programmation windows, c'est comme si tu avais un fichier c:\winnt\truc.txt, et que tu savais que dans le même répertoire tu as un fichier truc2.txt.
C'est plus simple de regarder les premières lettres de c:\winnt\truc.txt et les coller devant truc2.txt que de faire une recherche sur tous les disques du fichier truc2.txt ...
a+
Xavier Garreau
Forum posts: 1918
A:\toto\monfichier.txt
B:\toto\monfichier.txt
C:\toto\monfichier.txt
D:\toto\monfichier.txt
...
Et s'arrete dès qu'elle le trouve. C'est la méthode "normale" pour resoudre ce problème de drive sur Symbian.
Eric Bustarret
NewLC Founder & CEO / Professional Symbian OS Consultant
Forum posts: 8
a+
Xavier Garreau
Forum posts: 20
Et la méthode avec * (enfin directement \\system\\...) c'est propre à UIQ ou c'est dispo partout à partir de symbian 7 ?
Cette méthode est propre à tous à partir de symbian OS 7, pour la simple raison que UIQ n'est qu'une couche de Symbian OS chargée de l'interface utilisateur.
Par ailleurs, dans la documentation, il semblerait que ?: et *: soit équivalent.
Je ne trouve pas de référence envers !:
Cordialement,
A13
Kiss me I'm french