2010-12-18 33 views
23

आईफोन में हम लॉक स्क्रीन, वॉलपेपर और रिंगटोन प्रोग्रामेटिक रूप से सेट कर सकते हैं?आईफोन में लॉक स्क्रीन, वॉलपेपर और रिंगटोन प्रोग्रामेटिक रूप से कैसे सेट करें?

यदि हाँ, तो कृपया मुझे बताएं कि उन्हें कैसे सेट करें?

+1

+1 मैंने इसे कई ऐप्स में देखा। http://stackoverflow.com/questions/15024361/add-image-on-lock-screen-in-ios-app-when-app-is-running-in-background – HDdeveloper

उत्तर

33

यह सब आसानी से किया जा सकता है, लेकिन ऐप्पल द्वारा खारिज कर दिया जाएगा।

रिंगटोन com.apple.SpringBoard.plist, विशेष रूप से ringtone कुंजी को बदलकर बदला जा सकता है।

निम्नलिखित कोड का उपयोग कस्टम रिंगटोन (आईट्यून्स द्वारा सिंक किया गया) के वास्तविक रिंगटोन शीर्षक को पढ़ने के लिए किया जा सकता है।

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 क्षुधा में से एक में इस्तेमाल किया गया: पर

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; 

वॉलपेपर ओवरराइट किया जा सकता। उनके लिए वास्तव में बहुत कुछ नहीं है, लेकिन इन्हें आपको सही दिशा में जाना चाहिए।

+2

वॉलपेपर पथ अब मान्य नहीं हैं। – EightyEight

+27

नीचे वोट के लिए कोई ज़रूरत नहीं है। वे उस समय वैध थे जब प्रश्न पूछा गया था और सही उत्तर के रूप में चुना गया था। – WrightsCS

+2

मैं आपको नया रास्ता नहीं बता सकता, लेकिन मैं आपको बता सकता हूं कि सेब एक नई छवि फॉर्मेट का उपयोग करता है। यह एक cpbitmap है, इसलिए यदि आप छवि को टॉमव करना चाहते हैं तो आपको पहले .png या .jpeg को .cpbitmap –

1

उपयोग निजी एपीआई यदि आप कर सकते हैं जांच PLStaticWallpaperImageViewController

+1

यह आईओएस 10 तक काम करता है। – Nate

1

answer by WrightsCS आईओएस में बदलाव के कारण कुछ बिंदु पर काम करना बंद कर। दुर्भाग्यवश, अगर आप अनूदित सुविधाओं का उपयोग करना चाहते हैं, तो यह कुछ ऐसा है जिसके साथ आपको रहना है।

यदि आपको अभी भी ऐसा करने की आवश्यकता है, तो गैर-ऐप स्टोर ऐप्स के लिए केवल, यह कोड आईओएस 9.3 में काम करता है। हालांकि, भविष्य में आईओएस रिलीज में काम करना बंद कर सकता है। (नीचे टिप्पणी देखें: नहीं रह गया है आईओएस 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); 

आप अपने प्रोजेक्ट के लिए निजी एपीआई हैडर जोड़ने की आवश्यकता होगी। आप आमतौर पर इन खोजों को थोड़ी सी खोज के साथ पा सकते हैं, for example, here

उपरोक्त उदाहरण में, [SBSUIWallpaperPreviewViewController setWallpaperForLocations:] 3 का एक तर्क के साथ कहा जाता है: 3 इंगित करता है छवि दोनों ताला और घर स्क्रीन के लिए इस्तेमाल किया जाना चाहिए। 1 केवल लॉक स्क्रीन इंगित करता है। 2 केवल होम स्क्रीन इंगित करता है।


कारण है कि मैं इस ढांचे को खोलने गतिशील की एक विवरण के लिए, my related answer here देखते हैं।

मेरे पास रिंगटोन के बारे में कोई जवाब नहीं है। यह वास्तव में एक अलग सवाल होना चाहिए: काम पर पूरी तरह से अलग एपीआई।

+1

दुर्भाग्यवश यह आईओएस 10 पर अब काम नहीं करता है। @Nate क्या आपको जानकारी है कि यह आईओएस 10 पर कैसे चल रहा है? (आईओएस 10 के लिए उसका कोड त्रुटि के साथ दुर्घटनाग्रस्त हो जाता है: दावा विफल: (0), कार्य SBSUIWallpaperClearVideo, फ़ाइल/BildRoot/Library/Caches/com.apple.xbs/Sources/SpringBoardUIServices/SpringBoard-3563.15.8.9/SBSUIWallpaperUtilities.m, लाइन 143.) शायद उन्होंने कुछ स्मार्ट आवेदकों को जोड़ा ...) –

+0

@ गुंटिस ट्रीलैंड्स, हाँ मैंने यह भी देखा। मैं [आईओएस 10 हेडर] देख रहा हूं (https://github.com/nst/iOS-Runtime-Headers/blob/master/PrivateFrameworks/SpringBoardUIServices.framework/SBSUIWallpaperPreviewViewController.h) और ऐसा लगता है कि एपीआई अभी भी वहां है । अब, एंटाइटेलमेंट द्वारा संरक्षित किया जा सकता है। मुझे अतीत में ऐसा करने के अन्य तरीकों को याद रखने में याद है, इसलिए मुझे इस सप्ताह के अंत में कुछ काम करने के लिए कुछ काम करने की कोशिश करें। – Nate

+0

@ गुंटिस ट्रीलैंड्स, मैंने 'PLStaticWallpaperImageViewController' में समान विधि का उपयोग करने का भी प्रयास किया, लेकिन यह भी असफल रहा। ऐसा लगता है कि आईओएस पहचानता है कि ऐप अपने सैंडबॉक्स के बाहर कुछ बदलने की कोशिश कर रहा है। मैं यह भी देखता हूं कि [फोटो लाइब्रेरी] में एक और एपीआई है (https://github.com/nst/iOS-Runtime-Headers/blob/master/PrivateFrameworks/PhotoLibrary.framework/PLWallpaperImageViewController.h), लेकिन मुझे कुछ रिवर्स इंजीनियरिंग करना है यह पता लगाने के लिए कि पैरामीटर क्या लेता है। मैं आपको यहां अपडेट रखूंगा। – Nate

संबंधित मुद्दे