为了账号安全,请及时绑定邮箱和手机立即绑定

如何在iPhone中以编程方式设置锁屏,墙纸和铃声?

如何在iPhone中以编程方式设置锁屏,墙纸和铃声?

慕桂英4014372 2019-11-27 14:02:18
在iPhone中,我们可以通过编程方式设置锁定屏幕,墙纸和铃声吗?如果是,那么请让我知道如何设置它们?
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

这一切都可以轻松完成,但会被苹果公司拒绝。


铃声可以通过改变而改变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应用程序之一中使用。对他们来说并没有太多的东西,但是这些应该可以使您朝正确的方向前进。

查看完整回答
反对 回复 2019-11-27
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

由于iOS的更改,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标头添加到您的项目中。通常,您可以通过一些搜索在网上找到这些内容,例如,此处。


另外,在上述的例子中,[SBSUIWallpaperPreviewViewController setWallpaperForLocations:]被调用的3参数:3表示图像应被用于两个锁和主画面。1表示仅锁定屏幕。2仅指示主屏幕。


有关为什么我要动态打开此框架的说明,请参见此处的相关答案。


关于铃声我没有答案。这确实应该是一个单独的问题:完全不同的API在起作用。


查看完整回答
反对 回复 2019-11-27
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

如果可以检查,请使用专用API PLStaticWallpaperImageViewController


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 687 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信