¿Cómo configurar la pantalla de locking, el fondo de pantalla y el tono de llamada mediante progtwigción en iPhone?

En iPhone, ¿podemos configurar la pantalla de locking, el fondo de pantalla y el tono de llamada de forma programática?

Si es así, ¿por favor, hágamelo saber cómo configurarlos?

Todo esto se puede hacer fácilmente, pero será rechazado por Apple.

El tono de llamada se puede cambiar alterando com.apple.SpringBoard.plist , específicamente la clave de ringtone .

El siguiente código se puede utilizar para leer el título de tono de llamada de tonos de timbre personalizados (sincronizado por 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; 

Los fondos de pantalla se pueden sobrescribir en:

 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"; 

Estos ejemplos fueron usados ​​en una de mis aplicaciones de Cydia. En realidad, no hay mucho más para ellos, pero esto debería llevarlo en la dirección correcta.

La respuesta de WrightsCS dejó de funcionar en algún momento debido a un cambio en iOS. Desafortunadamente, esto es algo con lo que tiene que vivir si desea usar funciones no documentadas .

Si aún necesita hacer esto, para aplicaciones que no son de la App Store , este código funciona en iOS 9.3. Sin embargo, podría dejar de funcionar en cualquier versión futura de iOS. (ver comentario a continuación: ya no funciona en iOS 10)

 #import "SBSUIWallpaperPreviewViewController.h" #import  // 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); 

Deberá agregar el encabezado de la API privada a su proyecto. Por lo general, puede encontrarlos en línea con una pequeña búsqueda, por ejemplo, aquí .

En el ejemplo anterior, se [SBSUIWallpaperPreviewViewController setWallpaperForLocations:] con un argumento de 3: 3 indica que la imagen se debe usar para las pantallas de locking y de inicio. 1 indica pantalla de locking solamente. 2 indica solo la pantalla de inicio.


Para una explicación de por qué abro este marco dinámicamente , vea mi respuesta relacionada aquí .

No tengo una respuesta con respecto a los tonos de llamada . Esto realmente debería ser una pregunta separada: API completamente diferentes en el trabajo.

use api privado si puede verificar PLStaticWallpaperImageViewController