В iPhone можно установить программный экран блокировки, обои и рингтон?
Если Да, то, пожалуйста, дайте мне знать, как их установить?
В 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. Theres на самом деле не намного больше, но они должны заставить вас идти в правильном направлении.
используйте private api, если можете
проверьте PLStaticWallpaperImageViewController
Ответ WrightsCS в какой-то момент прекратил работу из-за изменения в iOS. К сожалению, с этим вам нужно жить, если вы хотите использовать недокументированные функции.
Если вам все еще нужно это делать, только для приложений, отличных от App Store, этот код работает в 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 на работе.