zoukankan      html  css  js  c++  java
  • Windows Phone 8上的SD 卡读取读取音频文件并设置为手机铃声

    在通过从MSDN上的学习是这样实现的:

    首先在Sd卡上新建一个Ringstones的文件夹 向文件内放一些MP3格式的音频文件 再将文件重命名为“.yumi”格式的文件

    • 第 1 步: 指定功能    

                 在应用程序清单文件中,WMAppManifest.xml,指定访问 SD 卡的ID_CAP_REMOVEABLE_STORAGE功能。

                 XAML
      <Capability Name="ID_CAP_REMOVABLE_STORAGE" />
     
    • 步骤 2: 注册扩展                  

         若要处理特定的文件类型,注册文件关联扩展名。在 WMAppManifest.xml 中指定的扩展名。

         后的标记元素,里面的扩展元素,只是下面的FileTypeAssociation元素与指 定文件关联扩展名。

     1  <Extensions>
     2       <FileTypeAssociation TaskID="_default" Name="yumi" NavUriFragment="fileToken=%s">
     3         <Logos>
     4           <Logo Size="small" IsRelative="true">Assets/Route_Mapper_Logo33x33.png</Logo>
     5           <Logo Size="medium" IsRelative="true">Assets/Route_Mapper_Logo69x69.png</Logo>
     6           <Logo Size="large" IsRelative="true">Assets/Route_Mapper_Logo176x176.png</Logo>
     7         </Logos>
     8         <SupportedFileTypes>
     9           <FileType ContentType="application/yumi">.yumi</FileType>
    10         </SupportedFileTypes>
    11       </FileTypeAssociation>
    12     </Extensions>
    • 步骤3: 从 SD 卡中获取文件
    // 连接当前的SDCard
    ExternalStorageDevice _sdCard = (await ExternalStorage.GetExternalStorageDevicesAsync()).FirstOrDefault(); // 如果sd卡存在连接Ringstone文件夹. if (_sdCard != null) { try { ExternalStorageFolder routesFolder = await _sdCard.GetFolderAsync("Ringstones"); IEnumerable<ExternalStorageFile> routeFiles = await routesFolder.GetFilesAsync();
    foreach (ExternalStorageFile esf in routeFiles) { if (esf.Path.EndsWith(".yumi")) { Routes.Add(esf); } } } catch (FileNotFoundException) { MessageBox.Show("你的SD卡上的Ringstones文件夹丢失。添加一个Ringstones文件夹中包含至少一个yumi文件,然后再试一次."); } } else { MessageBox.Show("你的SD卡上的Ringstones文件夹丢失。添加一个Ringstones文件夹中包含至少一个yumi文件,然后再试一次.");
    }


    4 对读到的文件流进行转换成mp3格式并设为手机铃声

        

      private async void SetRingClick( ExternalStorageFile ef)
            {
                Stream s = await ef.OpenForReadAsync();
                SaveRing(s, ef.Name);
            }
    //检查系统中是否存在YumiRings文件夹
    private void CreateDir() { if (store.DirectoryExists("YumiRings") == false) { store.CreateDirectory("YumiRings"); } }
    //保存为铃声
    private void SaveRing(Stream s,string name) { try {

    //将读取到的.yumi格式的文件进行转储到软件中并重新更改文件格式
    string filename = name.Replace("yumi", "mp3"); CreateDir(); if (store.FileExists("YumiRings" + filename)) { store.DeleteFile("YumiRings" + filename); } IsolatedStorageFileStream newstream = new IsolatedStorageFileStream("YumiRings//" + filename, FileMode.Create, store); BinaryWriter newwriter = new BinaryWriter(newstream); BinaryReader tempreader = new BinaryReader(s); int filesize = (int)s.Length; byte[] TempBytes = new byte[filesize]; TempBytes = tempreader.ReadBytes(filesize); newwriter.Write(TempBytes); newwriter.Close(); newstream.Close(); SetRing(filename); } catch (Exception) { return; } } ///启动手机中保存铃声的Task实现铃声的保存
    private void SetRing(string name) { SaveRingtoneTask saveRingtoneChooser = new SaveRingtoneTask(); saveRingtoneChooser.Completed += new EventHandler<TaskEventArgs>(saveRingtoneChooser_Completed); try { saveRingtoneChooser.Source = new Uri("isostore:/YumiRings/" + name); saveRingtoneChooser.DisplayName = name.Substring(0, name.IndexOf(".")); saveRingtoneChooser.Show(); } catch (System.InvalidOperationException e) { MessageBox.Show(e.Message); } } public void saveRingtoneChooser_Completed(object sender, TaskEventArgs e) { switch (e.TaskResult) { case TaskResult.OK: MessageBox.Show("OK"); break; case TaskResult.Cancel: MessageBox.Show("No"); break; case TaskResult.None: MessageBox.Show("No"); break; } }

     源码地址:http://vdisk.weibo.com/s/s9wdl 请加QQ群:157153754

  • 相关阅读:
    net应用程序池自动关闭的解决方法
    asp.net 多个txt压缩导出下载
    asp.net 对象转XML,XML转对象
    asp.net Cache缓存的用法
    oracle 增加大字段项
    asp.net简繁体转换
    asp.net 根据连接地址保存文件,图片
    SpringSide从系统全局里面取值
    SpringSide dml操作
    一张表里面形成的树,固定初始化数据
  • 原文地址:https://www.cnblogs.com/fxiaoquan/p/2939053.html
Copyright © 2011-2022 走看看