我们一直在使用WifiManager隐藏API来启用Wifi网络共享并创建一个接入点.Android上的API 26现在的问题是标签@RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED)已添加到setWifiApEnabled函数中,现在调用返回false并打印以下日志:
W/WifiManager:PACKAGE_NAME尝试调用setWifiApEnabled enabled = true
阅读新文档时,它表示该函数已弃用,并将在即将发布的版本中删除,而是ConnectivityManager#startTethering在调用者具有适当权限时使用,但此方法在没有TETHER_PRIVILEGED权限时也存在同样的问题.文档中提供的另一个选项是使用,LocalOnlyHotspot但这对项目没用,因为创建的热点没有Internet连接.
我还使用startSoftAp隐藏API中的函数进行了测试,但由于引发了以下异常,因此没有成功的结果:
WifiService:用户10164和当前进程都没有android.permission.NETWORK_STACK
是否有任何解决方法可以在较新的API上激活Wifi热点?我也搜索了Wifi网络共享的替代方案,但唯一可行的选择似乎是蓝牙网络共享,只有获得3G速度的缺点.还考虑了Wifi Aware和Wifi P2P,但这些都存在互联网连接不能在设备之间共享的问题.
有关如何处理此问题的任何建议?
随着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执行此操作?
我正在创建一个IOManager类,其中我有一个函数来读取文件并将其存储在缓冲区中.这样做最有效的方法是什么?
我目前有2段代码:
bool IOManager::readFileToBuffer(std::string filePath, std::vector<unsigned char>& buffer) {
std::ifstream file(filePath, std::ios::binary);
if (file.fail()) {
perror(filePath.c_str());
return false;
}
//seek to the end
file.seekg(0, std::ios::end);
//Get the file size
int fileSize = file.tellg();
file.seekg(0, std::ios::beg);
//Reduce the file size by any header bytes that might be present
fileSize -= file.tellg();
buffer.resize(fileSize);
file.read((char *)&(buffer[0]), fileSize);
file.close();
return true;
}
Run Code Online (Sandbox Code Playgroud)
和
bool IOManager::readFileToBuffer(std::string filePath, std::vector<char>& buffer) {
std::ifstream file(filePath, std::ios::binary);
if (file.fail()) {
perror(filePath.c_str());
return false;
}
// copies all data into …Run Code Online (Sandbox Code Playgroud) 我有一个使用 Spring Boot 和 Apache Camel 构建的 Web 应用程序,我正在实现一个 REST 接口。目前,使用 Camel 默认Servlet或Restlet组件,我没有在响应中获得 HTTP 状态代码原因。
这是我在将 HTTP 状态代码设置为 403 时得到的示例响应:
< HTTP/1.1 403
< Date: Mon, 19 Feb 2018 10:01:21 GMT
< Server: Restlet-Framework/2.4.0
< Content-Type: application/json
< Content-Length: 75
Run Code Online (Sandbox Code Playgroud)
应该如何:
< HTTP/1.1 403 Forbidden
< Date: Mon, 19 Feb 2018 10:01:21 GMT
< Server: Restlet-Framework/2.4.0
< Content-Type: application/json
< Content-Length: 75
Run Code Online (Sandbox Code Playgroud)
如何配置 Camel/Restlet/Servlet 以在 HTTP 状态代码中包含原因?
我目前的配置:
应用程序.java
@SpringBootApplication
public class Application extends SpringBootServletInitializer { …Run Code Online (Sandbox Code Playgroud) android ×2
android-wifi ×2
apache-camel ×1
c++ ×1
c++11 ×1
c++14 ×1
hotspot ×1
java ×1
rest ×1
restlet ×1
spring-boot ×1
tethering ×1