Nano Hash - криптовалюты, майнинг, программирование

Можно ли отключить устройство Bluetooth в Cocoa/ObjC?

Я связал IOBluetoothDevice в своем приложении Mac/Cocoa и хотел бы «разорвать пару» с ним программно. То есть я хотел бы удалить устройство из левой панели раздела Bluetooth в Системных настройках.

Я видел [IOBluetoothDevice removeFromFavorites], но это просто удаляет значок сердца рядом с атрибутом «Избранное» устройства — устройство по-прежнему отображается на левой панели.

Возможно ли это через Cocoa?

Раздел Bluetooth в системных настройках

На приведенном выше рисунке я хотел бы программно удалить «Apple Mighty Mouse» с левой панели.


  • вы хотите удалить то же самое в приложении Mac или iOS ?? 25.12.2013
  • @hussainShabbir Об этом вам должны сказать теги! 26.12.2013

Ответы:


1

Сопряженные устройства являются частью Системных настроек.

Вы можете найти файл с настройками bluetooth в /Library/Preferences, его имя com.apple.Bluetooth.plist.

com.apple.Bluetooth.plist

Однако вы не можете редактировать файл напрямую. Вы должны использовать класс SCPreferences из System Configuration framework.

Обратите внимание, что API для доступа/изменения системных настроек довольно низкого уровня.

РЕДАКТИРОВАТЬ: следующий код работает при запуске в режиме суперпользователя. Я сам не разработчик Mac OS, но должна быть возможность запустить его с помощью AuthorizationRef и запустить в пользовательском режиме (пользователь подтвердит доступ к конфигурации системы).

SCPreferencesRef prefs = SCPreferencesCreate(kCFAllocatorDefault,
                                             CFSTR("Test"),
                                             CFSTR("/Library/Preferences/com.apple.Bluetooth.plist"));

const CFStringRef PAIRED_DEVICES_KEY = CFSTR("PairedDevices");

NSArray *pairedDevices = (__bridge NSArray *) SCPreferencesGetValue(prefs, PAIRED_DEVICES_KEY);

NSLog(@"Paired devices: %@", pairedDevices);

NSString *deviceToRemove = @"e4-32-cb-da-ca-2f";        

NSMutableArray *newPairedDevices = [pairedDevices mutableCopy];
[newPairedDevices removeObject:deviceToRemove];

Boolean valueSet = SCPreferencesSetValue(prefs, PAIRED_DEVICES_KEY, (__bridge CFPropertyListRef) [NSArray arrayWithArray:newPairedDevices]);

NSLog(@"Value set: %@", (valueSet) ? @"YES" : @"NO");

if (!valueSet) {
    NSLog(@"Error: %@", SCCopyLastError());
}

Boolean saved = SCPreferencesCommitChanges(prefs);

if (!saved) {
    NSLog(@"Error: %@", SCCopyLastError());
}

NSLog(@"Saved: %@", (saved) ? @"YES" : @"NO");

CFRelease(prefs);
23.12.2013
  • все отлично работает до SCPreferencesCommitChanges, где я получаю Error Domain=com.apple.SystemConfiguration Code=1002 "Invalid argument" UserInfo={NSDescription=Invalid argument}. Вы случайно не знаете, почему это может происходить? Спасибо! 19.04.2019
  • @MikeJSChoi Вы пробовали именно этот код или переписываете на Swift? 19.04.2019
  • Я пытаюсь переписать это на Swift! Вот ссылка на мой вопрос stackoverflow.com/ вопросы/55764449/ 19.04.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..