はじめに
2011年7月27日に、
今までリリースされたWindows Phoneと比較してもコンパクトかつ防水防塵の筐体で、
日本で始めて発売されるプラットフォームだけあり、
Windows Phone 7.
Marketplaceでのアプリケーション配布の対象国に日本が追加され、
SaveRingToneTaskを使って着信音を登録する
前回の続きとなりますが、
着信音として設定するには、
- MP3もしくはWMAフォーマットであること
- 40秒以下の長さであること
- DRM保護されていないこと
- サイズが1MB以下であること
Windows Phone SDK 7.
今回は、
プロジェクトにサンプルMP3ファイルを追加する
MP3ファイルをプロジェクトに追加します。ソリューションエクスプローラーで、

任意のファイルを追加してください。ここでは

リソースとしてビルド時にアプリケーション内に楽曲ファイルを含めてしまいたいので、

Build Actionを
リソースファイルを分離ストレージへ保存する
一般的なアプリケーションでSaveRingtoneTaskを使用するケースを考えた場合、
まず、
なんらかのストリームから分離ストレージへの保存処理自体は連載第29回の
Application.
// アプリケーションリソースファイルを分離ストレージへ保存する
private void SaveFileTo(string fileName)
{
var resourceStream = Application.GetResourceStream(new Uri(fileName, UriKind.Relative));
var store = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();
// 以前に作成したファイルが残っている場合は削除する
if (store.FileExists(fileName))
{
store.DeleteFile(fileName);
}
// 読み込んだストリームを分離ストレージのファイルに書き出す
using (var strm = store.CreateFile(fileName))
using (var reader = new System.IO.BinaryReader(resourceStream.Stream))
{
var bytes = new byte[256 * 1024];
while (true)
{
int read = reader.Read(bytes, 0, bytes.Length);
if (read <= 0) break;
strm.Write(bytes, 0, read);
}
}
store.Dispose();
}
' アプリケーションリソースファイルを分離ストレージへ保存する
Private Sub SaveFileTo(fileName As String)
Dim resourceStream = Application.GetResourceStream(New Uri(fileName, UriKind.Relative))
Dim store = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication()
' 以前に作成したファイルが残っている場合は削除する
If store.FileExists(fileName) Then
store.DeleteFile(fileName)
End If
' 読み込んだストリームを分離ストレージのファイルに書き出す
Using strm = store.CreateFile(fileName)
Using reader = New System.IO.BinaryReader(resourceStream.Stream)
Dim bytes = New Byte(256 * 1024 - 1) {}
While True
Dim read As Integer = reader.Read(bytes, 0, bytes.Length)
If read <= 0 Then
Exit While
End If
strm.Write(bytes, 0, read)
End While
End Using
End Using
store.Dispose()
End Sub
SaveFileToメソッドにリソース名
SaveRingtoneTaskを使って着信音を登録する
先ほどアプリケーションリソースを分離ストレージへ保存するメソッドを作りました。ボタンをタップされたのをトリガーにして着信音を登録してみましょう。MainPage.
<Button Content="SaveRingtone" Height="89" HorizontalAlignment="Left" Margin="6,322,0,0" x:Name="btnSaveRingtone" VerticalAlignment="Top" Width="444" Click="btnSaveRingtone_Click" />
ボタンがタップされると、
DisplayNameプロパティを設定すると、
最後にSourceプロパティへ分離ストレージに保存したファイルパスを
今回使用するSaveRingtoneTaskを始め、
Reactive Extentionを使うには、
private void btnSaveRingtone_Click(object sender, RoutedEventArgs e)
{
// アプリケーションリソースのMP3ファイルを分離ストレージに保存する
SaveFileTo("sample.mp3");
var saveRingToneTask = new SaveRingtoneTask();
saveRingToneTask.DisplayName = "JUMP ON!";
saveRingToneTask.IsShareable = true;
saveRingToneTask.Source = new Uri("isostore:/sample.mp3");
Observable.FromEvent<TaskEventArgs>(
h => saveRingToneTask.Completed += h,
h => saveRingToneTask.Completed -= h)
.Subscribe(ex =>
{
// 着信音の保存に成功
if (ex.EventArgs.TaskResult == TaskResult.OK)
MessageBox.Show("Save Success!");
});
saveRingToneTask.Show();
}
Private Sub btnSaveRingtone_Click(sender As Object, e As RoutedEventArgs)
' アプリケーションリソースのMP3ファイルを分離ストレージに保存する
SaveFileTo("sample.mp3")
Dim saveRingToneTask = New SaveRingtoneTask()
saveRingToneTask.DisplayName = "JUMP ON!"
saveRingToneTask.IsShareable = True
saveRingToneTask.Source = New Uri("isostore:/sample.mp3")
Observable.FromEvent(Of TaskEventArgs)(
Sub(h) AddHandler saveRingToneTask.Completed, h,
Sub(h) RemoveHandler saveRingToneTask.Completed, h) _
.Subscribe(Sub(ex)
' 着信音の保存に成功
If ex.EventArgs.TaskResult = TaskResult.OK Then
MessageBox.Show("Save Success!")
End If
End Sub)
saveRingToneTask.Show()
End Sub
上記のコードが正しく実行されると、

Windows Phone Emulatorでは、
一番上に表示されている項目

いくつか設定項目がありますが

Customの項目に、

登録した着信音を削除したい場合は、
さいごに
2011年8月10日より
この評価端末プログラムは、
以上で今回は終わりです。ありがとうございました。