27

iPhoneでは、ロック画面、壁紙、着信音をプログラムで設定できますか?

はいの場合、設定方法を教えてください。

4

3 に答える 3

38

これはすべて簡単に実行できますが、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 つで使用されました。それ以上のものはありませんが、これらはあなたを正しい方向に導くはずです.

于 2010-12-18T05:44:23.333 に答える
2

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 が機能しています。

于 2016-08-17T10:13:38.787 に答える