windows phone 自定义铃声
屌丝的电话是一个月都响不了几次的,无聊还是下了一个XX铃声,自娱自乐一下,google了一下实现原理,,,,,,真相啊!!!就是用了一个Task(SaveRingtoneTask),以前看的资料都没有提到还有这么个东西!郁闷。知道是怎么回事了 ,就开始敲键盘了(不是什么好习惯吧 呵呵)。
保存本地的音频文件为铃声还是比较简单的,那XX铃声是网络下载的,,,就开始想下载并写到独立存储文件的代码,好久不写!!!该忘的都忘了,回linzheng老师的博客再学习一下 文件下载 和 独立存储
先贴下代码(代码可能写的有点难看,忘大牛指点),定义了一个CustomRingtone类,来定义本地铃声和网络下载的音频文件,
public class CustomRingtone
{
SaveRingtoneTask saveRingtoneTask;
private WebClient webDown; public CustomRingtone()
{
saveRingtoneTask = new SaveRingtoneTask();
webDown = new WebClient();
saveRingtoneTask.Completed += new EventHandler<TaskEventArgs>(saveRingtoneTask_Completed);
} void saveRingtoneTask_Completed(object sender, TaskEventArgs e)
{
switch (e.TaskResult)
{
case TaskResult.Cancel:
MessageBox.Show("铃声保存失败");
break;
case TaskResult.None:
MessageBox.Show("未保存铃声");
break;
case TaskResult.OK:
MessageBox.Show("保存铃声成功");
break;
default:
break;
}
} public void CustomNetRingtone(string uri)
{
//通过read来获取下载的数据流
webDown.OpenReadCompleted += new OpenReadCompletedEventHandler(webDown_OpenReadCompleted);
webDown.OpenReadAsync(new Uri(uri)); } public void CustomAppRingtone(string name)
{
//本地文件放在Ringtone文件下
saveRingtoneTask.Source = new Uri("appdata:/Ringtone/"+ name);
saveRingtoneTask.DisplayName = "本地铃声";
saveRingtoneTask.Show();
} void webDown_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{ if (e.Cancelled != true)
{
Stream stream = e.Result;
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
if (!storage.DirectoryExists("Ringtone"))
{
storage.CreateDirectory("Ringtone");
}
using (IsolatedStorageFileStream isWrite = new IsolatedStorageFileStream("Ringtone/RingtoneTest.MP3",
FileMode.OpenOrCreate, storage))
{
long fileLong = stream.Length;
byte[] bytes = new byte[fileLong];
stream.Read(bytes, , bytes.Length);
isWrite.Write(bytes, , bytes.Length);
isWrite.Flush();
} saveRingtoneTask.Source = new Uri("isostore:/Ringtone/RingtoneTest.MP3");
saveRingtoneTask.DisplayName = "网络下载";
saveRingtoneTask.Show();
}
else
{
MessageBox.Show(e.Error.Message);
}
}
}
就不贴图了,虽然没图,但是绝对有真相。
要怎么判断下载的文件有没有存到独立存储中?这个我以前都没想过的问题,看来还是要多些才能有大的进步啊。微软提供了工具的
独立存储资源管理器工具 亲测了一下,一个RingtoneTest.MP3静静的躺在自己创建Ringtone目录下
windows phone 自定义铃声的更多相关文章
- 适用于 Windows 的自定义脚本扩展
自定义脚本扩展在 Azure 虚拟机上下载并执行脚本. 此扩展适用于部署后配置.软件安装或其他任何配置/管理任务. 可以从 Azure 存储或 GitHub 下载脚本,或者在扩展运行时将脚本提供给 A ...
- Windows phone 自定义用户控件(UserControl)——ColorPicker
编码前 学习Windows phone自定义用户控件,在<WPF编程宝典>学习的小例子.并根据windows phone稍微的不同,做了点修改.ColorPicker(颜色拾取器):拥有三 ...
- windows print 自定义字体颜色【python】
windows print 自定义字体颜色 import ctypes STD_INPUT_HANDLE = -10 STD_OUTPUT_HANDLE= -11 STD_ERROR_HANDLE = ...
- 【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
问题描述 在App Service for Windows的环境中,当前只提供了PHP 7.4 版本的选择情况下,如何实现自定义PHP Runtime的版本呢? 如 PHP Version 8.1.9 ...
- [WP8.1UI控件编程]Windows Phone自定义布局规则
3.2 自定义布局规则 上一节介绍了Windows Phone的系统布局面板和布局系统的相关原理,那么系统的布局面板并不一定会满足所有的你想要实现的布局规律,如果有一些特殊的布局规律,系统的布局面板是 ...
- iPhone手机更换自定义铃声
①首先将iPhone手机(iPhone5s)的数据线插入电脑USB接口中,然后打开iTunes(12.4.3.1)-->文件-->将文件添加到资料库 ②选中音乐文件-->点击编辑-- ...
- [转]Windows 注册自定义的协议
[转自] http://blog.sina.com.cn/s/blog_86e4a51c01010nik.html 1.注册应用程序来处理自定义协议 你必须添加一个新的key以及相关的value到HK ...
- Windows Phone 自定义一个启动画面
1.新建一个UserControl <UserControl x:Class="LoadingPage.PopupSplash" xmlns="http://sch ...
- iTunes 无法添加 iPhone 自定义铃声
本篇文章由:http://xinpure.com/itunes-unable-to-add-iphone-custom-ringtones/ 新版本 iTunes 需要在 菜单栏 -> 文件 中 ...
随机推荐
- nginx的监控配置
最近在弄性能,在性能过程中需要监控nginx的一些配置,这里简单的搭建了环境 //下载nginx 根据自己的版本 wget http://nginx.org/download/nginx-1.6.0 ...
- IIS 之 HTTP 错误 404.3 - Not Found(由于扩展配置问题而无法提供您请求的页面...)
错误如下图所示: 其实在IIS7中肯定能支持的的,只是我们在Win7中安装IIS7的时候没有勾选这些功能,具体方法如下: 1.依次打开" 控制面板→程序→程序和功能→打开或关闭Windwos ...
- find your present (2)
Problem Description In the new year party, everybody will get a "special present".Now it's ...
- Calculate the formula
Problem Description You just need to calculate the sum of the formula: 1^2+3^2+5^2+……+ n ^2. Input ...
- IOS 免受xib自动布局影响
1.适配苹果手机 iPhone 4 ,4s 一个xib iPhone 5 5s xib 以后iPhone6一个xib 2.再根据ios6 和 ios7 进行 微调 就是状态栏的那个问题 3.# ...
- asp.net中Response对象鱼Request对象
在asp.net中Response与Request对象是两个常用的对象,虽然他们长得有点像,但是作用却是截然不同,我们来看一下他们他们都有哪些不同. 一.Response对象主要作用:像浏览器输出信息 ...
- 基本java类-In.java
package com.algorithm.api; /************************************************************************ ...
- C++字符类型总结区别wchar_t,char,WCHAR
转至:http://www.360doc.com/content/12/0807/01/9290626_228750141.shtml 1.区别wchar_t,char,WCHAR ANSI:即 ch ...
- Atom 下载、安装
Atom工具的使用 由github发布的前端开发工具 非常强大的开发工具 官网下载地址:https://atom.io Atom的插件和主题安装和配置
- JAVA IO流的简单总结+收集日志异常信息
1.字节流: IuputStream 所有字节输出流的超类 . 抽象类 ---- FileInputStream ---- BufferedInputStream:提供数据的读取效率,拓展方法(内部维 ...