Вы, наверное, слышали о том, что можно было загружать пользовательские рингтоны с 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. Нажмите на любой контакт, указанный там, прикрепите его к стартовому экрану. Таким образом, будет легче экспериментировать позже.
Вы можете завершить звонок сейчас. Нажмите на контакт и измените его (значок карандаша внизу). Вот где вы увидите опцию под названием рингтон . Нажмите знак плюс, и вы увидите список доступных мелодий.