2012-09-21 16 views
12

को सतर्क पॉपअप इस कोड को वर्तमान ब्लूटूथ स्थिति निर्धारित करने की अनुमति देता है सिस्टम के बिना पर है:आईओएस - जाँच करता है, तो ब्लूटूथ उपयोगकर्ता

CBCentralManager* testBluetooth = [[CBCentralManager alloc] initWithDelegate:nil queue: nil]; 


switch ([testBluetooth state]) {....} 

लेकिन, जब [[CBCentralManager alloc] init ...] होता है, प्रणाली ब्लूटूथ बंद होने पर उपयोगकर्ता को अलर्ट पॉपअप करता है।

मेरे उपयोगकर्ताओं को परेशान किए बिना ब्लूटूथ स्थिति की जांच करने कोई तरीका है?

उत्तर

2

वर्तमान में इस एप्लिकेशन को आईओएस डिवाइस पर चलाने पर कोई चेतावनी नहीं है जो ब्लूटूथ LE का समर्थन करता है और जहां ब्लूटूथ अक्षम है। चेतावनी को अक्षम करने के साधन प्रदान करने के लिए यह एक वृद्धि अनुरोध होगा। इसलिए ऐप्पल को इस वृद्धि के बारे में और अधिक अनुरोध मिलते हैं, बेहतर।

20

मैं एक सेब डेवलपर की ओर से निम्नलिखित प्रतिक्रिया मिली: iOS7 में, CBCentralManagerOptionShowPowerAlertKey विकल्प आपने इस सूचना को निष्क्रिय करने देता है।

आप एक CBCentralManager havea जब आप इसे आरंभ हैं, तो आप विधि का उपयोग कर सकते हैं initWithDelegate:queue:options

उदाहरण:

मेरी ज फ़ाइल में मैं एक CBCentralManager * manager

मीटर फ़ाइल में है:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], CBCentralManagerOptionShowPowerAlertKey, nil]; 

_manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:options]; 

[_manager scanForPeripheralsWithServices:nil options:nil]; 
इस कोड को चेतावनी अब दिखाई नहीं देती के साथ

, मुझे आशा है कि मदद करता है!

+0

परिधीय स्कैनिंग के लिए विकल्प हैं: CBCentralManagerScanOptionAllowDuplicatesKey; सीबीसीएन्ट्रल मैनेजरस्केनऑप्शनसोलिकिट सर्विसेयूयूड्स; [कड़ी] (https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBCentralManager_Class/translated_content/CBCentralManager.html#//apple_ref/doc/constant_group/Peripheral_Scanning_Options) तो विकल्प शब्दकोश भेजने आप भेज रहे हैं scanForPeripheralWithServices में कोई फर्क नहीं पड़ता है। बस शुरुआत में इसकी आवश्यकता है – shim

+0

यह आईओएस 5 – Salim

+0

में काम नहीं कर रहा है आईओएस 8 + –

2

मैं iOS 8 के लिए और संस्करण

self.bluetoothManager = [[CBCentralManager alloc] 
             initWithDelegate:self 
             queue:dispatch_get_main_queue() 
             options:@{CBCentralManagerOptionShowPowerAlertKey: @(NO)}]; 

[self.bluetoothManager scanForPeripheralsWithServices:nil options:nil]; 
1

ऊपर मैं केवल iOS 9 पर इस परीक्षण किया है तो शायद किसी को इस एक पुराने OS डिवाइस का परीक्षण कर सकते चेतावनी निष्क्रिय करने के लिए नीचे दिए गए कोड का इस्तेमाल किया है।

हम सब कुछ करने के सामान्य रूप से एक बात को छोड़कर, बजाय सेटिंग्स के viewDidLoad में CBCentralManager प्रतिनिधि हम इस समय हम इसकी जरूरत है जब तक उदाहरण के मामले में छोड़ देते हैं, नीचे मैं इस एक बार मेरी लोड हो रहा है WKWebView समाप्त हो गया है कहते हैं, और क्योंकि के प्रत्येक पृष्ठ मेरी वेब दृश्य संभवतः मैं WKWebView didFinishNavigation में रखते ब्लूटूथ के उपयोग की आवश्यकता है।

स्विफ्ट

var managerBLE: CBCentralManager? 

func bluetoothStatus() { 
    managerBLE = CBCentralManager(delegate: self, queue: nil, options: nil) 
} 

func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) { 
    bluetoothStatus() 
} 

func centralManagerDidUpdateState(central: CBCentralManager) { 
    switch managerBLE!.state 
    { 
    case CBCentralManagerState.PoweredOff: 
     print("Powered Off") 
    case CBCentralManagerState.PoweredOn: 
     print("Powered On") 
    case CBCentralManagerState.Unsupported: 
     print("Unsupported") 
    case CBCentralManagerState.Resetting: 
     print("Resetting") 
     fallthrough 
    case CBCentralManagerState.Unauthorized: 
     print("Unauthorized") 
    case CBCentralManagerState.Unknown: 
     print("Unknown") 
    default: 
     break; 
    } 
} 

पल कि प्रतिनिधि bluetoothStatus() के भीतर स्थित है आप राज्य परिवर्तन आग देखेंगे।

अधिसूचना Bluetooth चालू करने का केवल, आपके ऐप का प्रारंभिक लोड जैसा कहा जा करना चाहते हैं लगता है यह इस तरह से कर रही है मतलब तुम सिर्फ तुम क्या centralManagerDidUpdateState

+0

भी मुझे पता है कि इस दृष्टिकोण में असर हो सकता है ऊर्जा खपत पर क्योंकि हम प्रतिनिधियों को स्थापित और रीसेट कर रहे हैं, इसलिए जब भी हम फ़ंक्शन को कॉल करते हैं, हम इसे फिर से सेट करने से पहले सीबीसीएन्ट्रल मैनेजर प्रतिनिधि को हटाने के बारे में सोचने के लायक हो सकते हैं? –

3

तेज तो आपके पास लेखन कर सकते हैं में से चाहते अपने अनुप्रयोग प्रतिनिधि में इन दो पंक्तियों समारोह के अंदर: didFinishLaunchingWithOptions launchOptions

self.bCentralManger = CBCentralManager(delegate: self, queue: dispatch_get_main_queue(), options: [CBCentralManagerOptionShowPowerAlertKey: false]) 
    self.bCentralManger.scanForPeripheralsWithServices(nil, options: nil) 

जहाँ आपके bCentralManger के रूप में घोषित किया जाना चाहिए:

निजी वर bCentralManger: CBCentralManager !

1

BadPirate's और Anas' उत्तर पर संयोजन करके, आप सिस्टम सिस्टम अलर्ट के बिना ब्लूटूथ स्थिति प्राप्त कर सकते हैं।

#import <CoreBluetooth/CoreBluetooth.h> 

@interface ShopVC() <CBCentralManagerDelegate> 

@property (nonatomic, strong) CBCentralManager *bluetoothManager; 

@end 

@implementation ShopVC 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    if(!self.bluetoothManager) 
    { 
     NSDictionary *options = @{CBCentralManagerOptionShowPowerAlertKey: @NO}; 
     self.bluetoothManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:options]; 
    } 
} 

#pragma mark - CBCentralManagerDelegate 

- (void)centralManagerDidUpdateState:(CBCentralManager *)central 
{ 
    NSString *stateString = nil; 
    switch(self.bluetoothManager.state) 
    { 
     case CBCentralManagerStateResetting: stateString = @"The connection with the system service was momentarily lost, update imminent."; break; 
     case CBCentralManagerStateUnsupported: stateString = @"The platform doesn't support Bluetooth Low Energy."; break; 
     case CBCentralManagerStateUnauthorized: stateString = @"The app is not authorized to use Bluetooth Low Energy."; break; 
     case CBCentralManagerStatePoweredOff: stateString = @"Bluetooth is currently powered off."; break; 
     case CBCentralManagerStatePoweredOn: stateString = @"Bluetooth is currently powered on and available to use."; break; 
     default: stateString = @"State unknown, update imminent."; break; 
    } 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Bluetooth state" 
                message:stateString 
                delegate:nil 
              cancelButtonTitle:@"ok" otherButtonTitles: nil]; 
    [alert show]; 
} 
संबंधित मुद्दे