ios - original - ¿Cómo configurar la pantalla de bloqueo, el fondo de pantalla y el tono de llamada mediante programación en iPhone?
la pantalla de mi iphone se ve opaca (3)
En iPhone, ¿podemos configurar la pantalla de bloqueo, el fondo de pantalla y el tono de llamada de forma programática?
Si es así, ¿por favor, hágamelo saber cómo configurarlos?
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 <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);
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 bloqueo y de inicio. 1 indica pantalla de bloqueo 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.
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.
use api privado si puede verificar PLStaticWallpaperImageViewController