OSX 监听系统网络设置

由于日常开发的需求,我们需要监听OSX一些系统设置的变化,达到软件程序设置的同步,这时我们可以通过以下函数监听系统设置的改变:

#include <SystemConfiguration/SystemConfiguration.h>

//------------------------------------------------------------------
    SCDynamicStoreRef dynStore;
    SCDynamicStoreContext context = {0, this, NULL, NULL, NULL};
    dynStore = SCDynamicStoreCreate(kCFAllocatorDefault,
                                    CFBundleGetIdentifier(CFBundleGetMainBundle()),
                                    SystemProxyChangeCallBack,//自定义回调函数,备注【1】
                                    &context);
    const CFStringRef keys[3] = {CFSTR("State:/Network/Global/Proxies")};//获取系统代理设置,备注【2】
    CFArrayRef watchedKeys = CFArrayCreate(kCFAllocatorDefault,
                                           (const void **)keys,
                                           1,
                                           &kCFTypeArrayCallBacks);
    if (SCDynamicStoreSetNotificationKeys(dynStore, NULL, watchedKeys))
    {
        CFRelease(watchedKeys);
        CFRunLoopSourceRef rlSrc = SCDynamicStoreCreateRunLoopSource(kCFAllocatorDefault, dynStore, 0);
        CFRunLoopAddSource(CFRunLoopGetCurrent(), rlSrc, kCFRunLoopDefaultMode);
        CFRelease(rlSrc);
    }
    else
    {
        CFRelease(watchedKeys);
        CFRelease(dynStore);
        dynStore = NULL;
    }
//------------------------------------------------------------------
   CFRunLoopRun(); //在程序中需要调用该函数监听效果

//================================================

备注【1】,当系统设置有所改变时,会触发该回调函数,可根据具体需要做相关的操作处理

void SystemProxyChangeCallBack(SCDynamicStoreRef store, CFArrayRef changedKeys,void *info)
{
}

备注【2】,这里demo程序为监听网络代理改变属性的设置,其他属性值可参考:

https://developer.apple.com/library/mac/documentation/Networking/Conceptual/SystemConfigFrameworks/SC_UnderstandSchema/SC_UnderstandSchema.html

时间: 2024-08-29 11:34:07

OSX 监听系统网络设置的相关文章

Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.net.ConnectivityManager;  import android.ne

广播小案例-监听系统网络状态 --Android开发

本例通过广播实现简单的监听系统网络状态改变的小案例. 1.案例效果演示 当手机连网后,系统提示“已连接网络”, 当手机断网后,系统提示“当前网络不可用1”. 2.案例实现 在主活动中动态注册广播,然后写一个内部类来接收系统广播,下面是相关文件的核心代码: MainActivity.java: public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private Networ

Linux对外提供服务 网络连接 端口操作 1.开启服务监听端口 2.设置防火墙,放行访问端口的包 iptables&amp;netfilter 四表五链和通堵策略

应用举例: Linux上安装Tomcat后,客户端要能够访问服务器上的Tomcat 操作: 1.网络操作 本机必须能够ping通目标主机(本地虚拟机或者远程主机) 2.端口操作 1.开启服务监听端口 2.设置防火墙,放行访问该端口的数据包 关键iptables和netfilter: iptables中的四表五链和堵通策略 CentOS6.7端口操作最佳实践: 查看iptables命令的帮助: iptables --help 不详细 man iptables 一般详细 手册页 info iptab

linux下数据库实例监听开机自启动设置

linux下数据库实例监听开机自启动设置 2016/5/16 zhanky 脚本介绍 在开始之前,我们先介绍一下几个会用到的脚本. oratab oratab文件是在创建数据库实例时建立的,在安装时使用root用户执行root.sh脚本后得到.(如果忘记也可以直接手动创建.) 在$ORACLE_HOME/bin目录下的$ORACLE_HOME/bin/dbstart和$ORACLE_HOME/bin/dbshut需要调用/etc/oratab文件,如果不存在,dbstart和dbshut将失败,

Android 监听系统短信广播

使用场景: 1.对系统接收到的短信进行识别,是广告或者是诈骗等 2.对短信内容进行过滤或者是对内容进行提取,比如验证码提取 3.对系统短信进行拦截,连系统自己都不让收到了(不会出现在系统数据里面,也不会有系统短信的通知栏提示) 备注: 1.系统短信广播为有序广播,要拦截的话,需要在注册广播的时候设置广播优先级为最大,不过这种也有风险,如果被其他的应用先拦截了,那么我们将不再收到,使用时需注意. 2.要接到系统短信广播,那么应用必须具备短信读取权限,这对使用者来说可能是一个限制 3.除了短信读取权

怎样绕过oracle listener 监听的password设置

 怎样绕过oracle 监听的password设置: 1.找到监听进程pid ,并将它kill 掉 ps -ef|grep tns [[email protected] admin]$ ps -ef|grep tns root         9     2  0 Jul11 ?        00:00:00 [netns] oracle   29668     1  0 10:12 ?        00:00:00 /oracle/bin/tnslsnr LISTENER -inher

通过ContentResolver监听系统短信变化

需要有读取短信的权限 <uses-permission android:name="android.permission.READ_SMS"/> ContentResolver注册一个内容观察者 ContentObserver内容观察者监听系统短信的变化 通过ContentResolver来获取短信内容提供者提供的短信信息 package com.heima.jiantingSms; import android.app.Activity; import android.c

linux系统-网络设置

linux系统-网络设置 一 vmvare网络 1 桥接模式:适合路由器可以发送多个ip,使虚拟机直接连接现实的网络 2 主机模式:虚拟机直接和主机连接,主机没有连接外部的网络 3 NAT网络地址转换模式:网络中只有一个ip,使用NAT 二 linux虚拟机 1 ifconfig:查看网卡的工作情况 2 eth0:系统的第一块网卡 3 eth1:系统的第二块网卡 4 lo:虚拟的回环网卡 5 virbro:虚拟的网桥 6 开启etho的配置文件路径:vi /etc/sysconfig/netwo

Android Notification之监听系统清除通知栏方法

编写了一个Notification通知工具类,里面含有监听系统清除通知栏方法,焦点在加粗斜体部分: public class Notifier { private static final String TAG = Notifier.class.getSimpleName(); private static Notifier instance; private Context mContext; private static final int NOTIFICATION_ID_1 = 0; pr