Статьи

Степень интеграции рингтона в Windows Phone SDK 7.1

Вы, наверное, слышали о том, что можно было загружать пользовательские рингтоны с NoDo (и даже предварительно NoDo), но это требовало небольшого взлома рефлексии. С выпуском инструментов Mango (OS 7.5) появилась возможность добавлять рингтоны в систему. Базовый класс, на который вам нужно взглянуть, называется SaveRingtoneTask, и он единственный, который позволяет разработчику получить доступ к возможностям рингтона. Есть несколько вещей, которые вы должны помнить, прежде чем мы пойдем дальше:

  • Вы не можете создавать рингтоны из существующих медиа на телефоне. Он ограничен носителями, доступными из самого приложения. Одной из причин здесь является лицензирование музыкального контента.
  • Вы не можете изменить / заменить системные мелодии звонка. Вы можете создать свой собственный, который будет указан в отдельной категории.
  • Вы не можете экспортировать созданные рингтоны, если у вас нет источника рингтона, сохраненного для последующего повторного использования.
  • Невозможно перечислить существующие пользовательские мелодии, созданные вами или другим сторонним продуктом.

Первое, что нам нужно сделать, это перейти к официальной статье MSDN для SaveRingtoneTask и ознакомиться с общими требованиями, чтобы рингтон был действительным. В статье говорится:

  • Файлы рингтонов должны быть типа MP3 или WMA.
  • Файлы мелодий звонка должны быть менее 40 секунд — обычно, когда вы принимаете звонок, он не звонит дольше 30 секунд (зависит от оператора и устройства). Использование трека длиной более 40 секунд будет пустой тратой пространства.
  • Файлы рингтонов не должны иметь защиту управления цифровыми правами (DRM).
  • Размер файла рингтона должен быть не более 1 МБ.

Если вы беспокоитесь о создании самих треков, есть программное обеспечение, которое может вам помочь — Audacity и Expression Encoder — это всего лишь два варианта из десятков (если не сотен).

Итак, давайте предположим, что у вас есть готовый файл. Что дальше? Прежде всего, вы должны инициализировать класс, который будет обрабатывать все.

SaveRingtoneTask task = new SaveRingtoneTask();

Существует свойство для экземпляра задачи, которое называется Source. От разработчика требуется указать URI, который указывает на локальный файл (внутри самого XAP приложения) или файл в изолированном хранилище, который будет использоваться в качестве мелодии звонка. Внешние рингтоны (с URI, который указывает вне XAP) не разрешены по соображениям безопасности.

Итак, вам нужно установить источник и показать задачу:

task.Source = new Uri("/coffee.wma");
task.Show();

В моем случае coffee.wma — это медиа-файл, расположенный в корне проекта:

ВАЖНОЕ ПРИМЕЧАНИЕ: Вы можете указать локальные рингтоны через схемы isostore , appdata и file URI, если необходимо (потребуется абсолютный путь).

Пришло время запустить его на телефоне. Или эмулятор — какой бы ни работал лучше. Я вставил фрагменты кода выше в конструктор главной страницы, прямо при его инициализации. Таким образом, я не делаю ничего другого в этом приложении, но добавляю новый рингтон.

Пользователю будет предложено ввести имя. Значением по умолчанию является имя файла без расширения. Его можно изменить в коде, изменив свойство DisplayName.

task.DisplayName = "MyCoffee";

После того, как пользователь нажмет OK, посмотрите на строку состояния в верхней части окна, чтобы увидеть статус Сохранение … и индикатор выполнения.

Если рингтон успешно сохранен, вы увидите ярлык с надписью … и ваш рингтон сохранен .

Когда именно последний ярлык может не появиться? Если рингтон не соответствует установленным требованиям, которые были упомянуты в начале этой статьи, процесс возобновит приложение, которое его вызвало. Пользователь не будет предупрежден о сбое процесса, поэтому может показаться, что все прошло хорошо. Однако рингтон не будет отображаться в списке пользовательских рингтонов. Это поднимает важный момент:

Убедитесь, что мелодия звонка, которую вы пытаетесь установить, соответствует указанным критериям. В противном случае он не будет добавлен, даже если во время выполнения не отображается сообщение об ошибке.

Еще интереснее может быть это — как именно проверить мелодии в эмуляторе? С заблокированным приложением « Настройки» кажется, что экспериментировать в «песочнице» на ПК бессмысленно. На самом деле, нет. Давайте вызовем эту задачу:

PhoneCallTask task = new PhoneCallTask();
task.PhoneNumber = "32434";
task.Show();

Абсолютно случайное число здесь — вы можете набрать в качестве PhoneNumber все, что захотите, если оно вызывается. Как только вы получите вызов, нажмите «Добавить в вызов», а затем выберите значок телефонной книги внизу.

Это приведет вас в центр People. Нажмите на любой контакт, указанный там, прикрепите его к стартовому экрану. Таким образом, будет легче экспериментировать позже.

Вы можете завершить звонок сейчас. Нажмите на контакт и измените его (значок карандаша внизу). Вот где вы увидите опцию под названием рингтон . Нажмите знак плюс, и вы увидите список доступных мелодий.