随着API级别26的发布,我的应用程序的核心功能破了,这就是改变了应用程序中用户的热点设置.要获取和设置此配置,我使用WifiManager隐藏的api中的以下函数:getWifiApConfiguration和setWifiApConfiguration.
Method getWifiApConfiguration = wifiManager.getClass().getMethod("getWifiApConfiguration");
getWifiApConfiguration.invoke(wifiManager);
Run Code Online (Sandbox Code Playgroud)
这适用于Android O之前的设备,但在此版本中我收到以下错误:
应用程序不允许读取或更新存储的WiFi Ap配置(uid = 10168)
我在清单中声明的权限是:
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.NETWORK_STACK"/>
<uses-permission android:name="android.permission.TETHER_PRIVILEGED" />
Run Code Online (Sandbox Code Playgroud)
如何使用最新的API执行此操作?
好的,所以我想检测用户在iOS设备中启用热点/网络共享的天气.我可以使用私人api知道它不会进入应用程序商店.
我试图通过私人api的列表/运行时标题,但有太多,无法决定哪些可能有用.
或者我是否可以知道UIApplicationWillChangeStatusBarFrameNotification在私有api中被触发的位置(可能需要调用活动调用和激活的热点等)
我试过检测个人热点并使用CaptiveNetwork,但它只返回连接的wi-fi ssid而不是创建的热点.
任何分享的知识都会非常有帮助
更新:@creker
使用上面的代码,编译器显示错误"SCDynamicStoreCreate不可用:在iOS上不可用.所以我进入SCDynamicStore.h并更改了以下内容
SCDynamicStoreRef
SCDynamicStoreCreate (
CFAllocatorRef allocator,
CFStringRef name,
SCDynamicStoreCallBack callout,
SCDynamicStoreContext *context
) __OSX_AVAILABLE_STARTING(__MAC_10_1,__IPHONE_NA);
Run Code Online (Sandbox Code Playgroud)
至
SCDynamicStoreRef
SCDynamicStoreCreate (
CFAllocatorRef allocator,
CFStringRef name,
SCDynamicStoreCallBack callout,
SCDynamicStoreContext *context
) __OSX_AVAILABLE_STARTING(__MAC_10_1,__IPHONE_6_0);
Run Code Online (Sandbox Code Playgroud)
现在我能够获得状态1022和1023的字典.只是想通过更改这样的文件来确认(以前没做过)我将在归档构建(或任何其他问题)中存在任何问题,除此之外我们的事实知道这段代码不会进入应用程序商店
我的网络共享应用有时无法访问互联网。在这些情况下,Windows 不会询问应用程序是否有权使用 Internet。我的应用程序不会产生任何错误,但当然不会束缚。
如何测试我的 Delphi 应用程序是否可以访问互联网以进行网络共享?
我已经在stackoverflow上找到了在android上以编程方式激活wifi-tethering的代码...但是如何以编程方式禁用wifi网络共享?有类似的东西setWifiApDisable吗?