在iPhone中,我们可以通过编程方式设置锁定屏幕,壁纸和铃声吗?
如果是,请告诉我如何设置它们?
答案 0 :(得分:35)
这一切都可以轻松完成,但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应用程序中。对他们来说并不多,但这些应该会让你朝着正确的方向前进。
答案 1 :(得分:2)
由于iOS的变化,answer by WrightsCS在某些时候停止了工作。不幸的是,如果您希望使用未记录的功能,则必须使用此功能。
如果您仍需要执行此操作,仅适用于非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标头添加到项目中。您通常可以通过一些搜索for example, here在线查找这些内容。
在上面的示例中,调用[SBSUIWallpaperPreviewViewController setWallpaperForLocations:]
时参数为3:3表示该图像应用于 锁定和主屏幕。 1表示仅锁定屏幕。 2表示仅限主屏幕。
有关我动态动态打开此框架的原因的说明,请参阅my related answer here。
我没有关于铃声的答案。这应该是一个单独的问题:完全不同的API在起作用。
答案 2 :(得分:1)
如果可以,请使用私人API
检查PLStaticWallpaperImageViewController