Как установить экраны блокировки, обои и рингтон программно в iPhone?

StackOverflow https://stackoverflow.com/questions/4476777

Вопрос

В iPhone мы можем программно установить экран блокировки, обои и рингтон?

Если Да, тогда, пожалуйста, дайте мне знать, как их установить?

Это было полезно?

Решение

Все это можно сделать легко, но будет отвергнуто Apple.

Рингтон можно изменить путем изменения com.apple.SpringBoard.plist, в частности ringtone ключ.

Следующий код может использоваться для чтения фактического заголовка рингтона пользовательских рингтонов (синхронизированный iTunes).

NSMutableDictionary *custDict = [[NSMutableDictionary alloc] initWithContentsOfFile:@"/private/var/mobile/Media/iTunes_Control/iTunes/Ringtones.plist"];
NSMutableDictionary *dictionary = [custDict objectForKey:@"Ringtones"];

NSArray *keys = [dictionary allKeys];
id key = [keys objectAtIndex:indexPath.row];
NSMutableDictionary *customRingtone = [dictionary objectForKey:key];
NSString *name = [customRingtone objectForKey:@"Name"];
cell.textLabel.text = name;

Обои могут быть перезаписаны на:

NSString *homePath1 = @"/private/var/mobile/Library/SpringBoard/HomeBackground.jpg";
NSString *homePath2 = @"/private/var/mobile/Library/SpringBoard/HomeBackgroundPortrait.jpg";
NSString *lockPath1 = @"/private/var/mobile/Library/SpringBoard/LockBackground.jpg";
NSString *lockPath2 = @"/private/var/mobile/Library/SpringBoard/LockBackgroundPortrait.jpg";

Эти примеры использовались в одном из моих приложений Cydia. Для них не гораздо больше, но они должны заставить вас двигаться в правильном направлении.

Другие советы

А Ответ Wrightscs перестал работать в какой -то момент из -за изменения в iOS. К сожалению, это то, с чем вы должны жить, если хотите использовать Недокументированный Особенности.

Если вам все еще нужно это сделать, Только для приложений для не приложений магазина, этот код работает в iOS 9.3. Это может перестать работать в любом будущем выпуске iOS. (См. Комментарий ниже: больше не работает в iOS 10)

#import "SBSUIWallpaperPreviewViewController.h"
#import <dlfcn.h>

// open the private framework dynamically
void *handle = dlopen("/System/Library/PrivateFrameworks/SpringBoardUIServices.framework/SpringBoardUIServices", RTLD_NOW);

UIImage *wallpaper = [UIImage imageNamed: @"background.jpg"];

Class sbClass = NSClassFromString(@"SBSUIWallpaperPreviewViewController");
// we create a view controller, but don't display it. 
//  just use it to load image and set wallpaper
SBSUIWallpaperPreviewViewController *controller = (SBSUIWallpaperPreviewViewController*)[[sbClass alloc] initWithImage: wallpaper];
[controller setWallpaperForLocations: 3];  // 3 -> set both for lock screen and home screen

dlclose(handle);

Вам нужно будет добавить частный заголовок API в ваш проект. Обычно вы можете найти их в Интернете с небольшим поиском, Например, здесь.

В примере выше, [SBSUIWallpaperPreviewViewController setWallpaperForLocations:] вызывается с аргументом 3: 3, указывает, что изображение должно использоваться для оба Замок и домашние экраны. 1 указывает только экрана блокировки. 2 Указывает только на главном экране.


Для объяснения того, почему я открываю эту структуру динамически, видеть мой связанный ответ здесь.

У меня нет ответа относительно Рингтоны. Анкет Это действительно должен быть отдельный вопрос: совершенно разные API на работе.

Используйте Private API, если вы можете проверить PLStaticWallpaperImageViewController

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top