Estoy tratando de obtener el estado del iPhone/iPod Bluetooth, ya sea que esté encendido o apagado programáticamente. ¿Es posible usar alguna API de Apple o una API de terceros?Cómo obtener el estado del bluetooth (ON/OFF) en el iphone programáticamente
Respuesta
Esta solución es poco viejo, antes de la introducción de la manzana central del bluetooth
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
Class BluetoothManager = objc_getClass("BluetoothManager") ;
id btCont = [BluetoothManager sharedInstance] ;
[self performSelector:@selector(status:) withObject:btCont afterDelay:1.0f] ;
return YES ;
}
- (void)status:(id)btCont
{
BOOL currentState = [btCont enabled] ;
//check the value of currentState
}
Hay una forma en IOS 5 y superiores utilizando CoreBluetooth. La clase que puede usar es CBCentralManager. Tiene un 'estado' de propiedad que puede verificar para ver si Bluetooth está activado o no. (la enumeración CBCentralManagerState tiene el valor (es) con el que desea verificar).
Un poco de investigación en Sam's answer que yo pensé en compartir puede hacerlo sin utilizar la API privada, pero con algunas salvedades:
- Sólo funcionará en iOS 5.0+
- Sólo funcionará en dispositivos que apoyan el bluetooth lE especificación (iPhone 4S +, quinta generación de iPod +, iPad tercera generación +)
- simple asignación de la clase hará que su aplicación a pedir permiso para usar la pila Bluetooth del usuario (no puede se desea), y si se niegan, lo único que verá es CBCentralManagerStateUnauthorized
- La recuperación del estado de bluetooth es asincrónica y continua. Usted tendrá que configurar un delegado para conseguir cambios de estado, como comprobar el estado de un gestor de Bluetooth recién asignado volverá CBCentralManagerStateUnknown
Dicho esto, este método no parece proporcionar actualizaciones en tiempo real del estado de la pila Bluetooth.
Después incluido el marco CoreBluetooth,
#import <CoreBluetooth/CoreBluetooth.h>
Estas pruebas eran fáciles de realizar usando:
- (void)detectBluetooth
{
if(!self.bluetoothManager)
{
// Put on main queue so we can call UIAlertView from delegate callbacks.
self.bluetoothManager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()];
}
[self centralManagerDidUpdateState:self.bluetoothManager]; // Show initial state
}
- (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];
}
Mencionó eso implícitamente, pero para consistencia: declare la propiedad '@property (no atómica, fuerte) CBCentralManager * bluetoothManager;' y configure su clase conforme al protocolo 'CBCentralManagerDelegate' –
Esto no funcionó para mí. ¿Alguien ha conseguido esto para trabajar para ellos? iOS7 + – achi
Puede evitar el mensaje de alerta usando el inicializador designado en CBCentralManager, revise esta respuesta: http://stackoverflow.com/a/19367494/823483 – bompf
Algunos cambios en la respuesta de BadPirate, con iOS7 puede establecer el gestor central no mostrar la alerta cuando se asigna el objeto administrador dándole un NSDictionary que tiene la clave "CBCentralManagerOptionShowPowerAlertKey" establecida en 0.
self.cbManager = [[CBCentralManager alloc] initWithDelegate:self
queue:nil
options:
[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0]
forKey:CBCentralManagerOptionShowPowerAlertKey]];
Esta respuesta se ha actualizado del Objective-C original a Swift 4.0.
Se supone que ya ha creado un gestor de bluetooth y ha asignado el delegado a la clase ViewController
.
import CoreBluetooth
extension ViewController : CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case .poweredOn:
print("powered on")
case .poweredOff:
print("powered off")
case .resetting:
print("resetting")
case .unauthorized:
print("unauthorized")
case .unsupported:
print("unsupported")
case .unknown:
print("unknown")
}
}
}
Para desactivar el mensaje de alerta por defecto sólo tiene que pasar a través de un diccionario de opción cuando se instancia la CBPeripheralManager:
SWIFT probado en iOS8 +
import CoreBluetooth
//Define class variable in your VC/AppDelegate
var bluetoothPeripheralManager: CBPeripheralManager?
//On viewDidLoad/didFinishLaunchingWithOptions
let options = [CBCentralManagerOptionShowPowerAlertKey:0] //<-this is the magic bit!
bluetoothPeripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: options)
Obviamente también es necesario para implementar el CKManagerDelegate el método de delegado peripheralManagerDidUpdateState como se describe anteriormente:
func peripheralManagerDidUpdateState(peripheral: CBPeripheralManager!) {
var statusMessage = ""
switch peripheral.state {
case .poweredOn:
statusMessage = "Bluetooth Status: Turned On"
case .poweredOff:
statusMessage = "Bluetooth Status: Turned Off"
case .resetting:
statusMessage = "Bluetooth Status: Resetting"
case .unauthorized:
statusMessage = "Bluetooth Status: Not Authorized"
case .unsupported:
statusMessage = "Bluetooth Status: Not Supported"
case .unknown:
statusMessage = "Bluetooth Status: Unknown"
}
print(statusMessage)
if peripheral.state == .poweredOff {
//TODO: Update this property in an App Manager class
}
}
cómo agregar propiedad ** CBPeripheralManager ** en swift. Dice que no puede encontrar un inicializador para el tipo "CBPeripheralManager" –
@ Aravind.A agregue 'import CoreBluetooth' a la parte superior de su archivo de origen – Awesomeness
Este fragmento de código es excelente para el silencio verificar el estado del bluetooth (on/off, etc.) –
- 1. ¿Cómo borro el caché del navegador programáticamente en el iPhone?
- 2. cómo pasar el audio del iPhone a los auriculares bluetooth
- 3. Mostrar el teclado del iPhone programáticamente
- 4. Establecer el estado del suscriptor en Magento programáticamente
- 5. iPhone - Eliminar barra de estado programáticamente
- 6. Obtener barra de estado del iPhone Altura
- 7. iPhone apague bluetooth GKPeerPickerController
- 8. Android: ¿cómo cambiar el estado del botón presionado programáticamente?
- 9. Cómo habilitar/deshabilitar bluetooth programáticamente en android
- 10. cómo ocultar el teclado programáticamente en iphone
- 11. ¿Cómo puedo obtener programáticamente la dirección MAC Bluetooth de un iPhone?
- 12. ¿Cómo utilizar el marco del núcleo bluetooth obtener datos?
- 13. ¿Cómo obtener el estado de la batería?
- 14. iPhone SDK 3.0: ¿dónde está el Bluetooth?
- 15. Cómo obtener el estado del archivo de carga en Flask
- 16. Cómo borrar programáticamente el caché del nombre de Bluetooth en Android?
- 17. ¿Cómo reproduzco el tono de llamada predeterminado del teléfono programáticamente?
- 18. ¿Cómo comprobar si bluetooth está habilitado programáticamente?
- 19. Programación de Bluetooth en iPhone
- 20. ¿Cómo obtener AppID en iPhone usando SDK/programáticamente?
- 21. iPhone Bluetooth Ejemplos de comunicación
- 22. Implementación de transferencia de datos Bluetooth en el iPhone
- 23. Cómo obtener el estado del trabajo de impresión con C#
- 24. Cambiar el nombre del dispositivo Bluetooth Android
- 25. ¿Cómo obtener el estado del proceso usando pid?
- 26. abertura de aplicación para el iPhone programáticamente
- 27. Cómo generar JSON programáticamente utilizando el marco JSON para iPhone
- 28. ¿Cómo encontrar el UUID del puerto serie del dispositivo Bluetooth?
- 29. cómo obtener el tamaño de memoria ocupado por una imagen programáticamente en iphone sdk?
- 30. ¿Cómo obtener el estado de la descarga?
Esto solo funcionará para dispositivos con BT LE, es decir, iPhone 4S +, iPad 3+ – domsom