12-21 15:41:33.636 I/WifiService( 1081): startScan uid=10098 12-21 15:41:33.640 I/WifiScanRequestProxy( 1081): Scan request from com.autonavi.amapauto throttled 12-21 15:41:33.640 I/ActivityManager( 1081): caller:android, send broadcast:android.net.wifi.SCAN_RESULTS 12-21 15:41:33.642 E/WifiService( 1081): Failed to start scan 12-21 15:41:33.775 I/ActivityManager( 1081): caller:android, send broadcast:android.intent.action.SIG_STR 12-21 15:41:33.971 I/hostapd ( 3893): ap0: STA 28:c7:09:63:e0:a3 IEEE 802.11: disassociated 12-21 15:41:33.971 I/wificond( 631): Station 28:c7:09:63:e0:a3 disassociated from hotspot 12-21 15:41:33.972 I/hostapd ( 3893): ap0: STA 28:c7:09:63:e0:a3 IEEE 802.11: disassociated 12-21 15:41:33.972 I/hostapd ( 3893): ap0: AP-STA-DISCONNECTED 28:c7:09:63:e0:a3 12-21 15:41:33.973 D/SoftApManager( 1081): Setting num stations on CMD_NUM_ASSOCIATED_STATIONS_CHANGED 12-21 15:41:33.973 D/SoftApManager( 1081): Number of associated stations changed: 0 12-21 15:41:33.975 D/AlarmManager( 1081): [set] switch ELAPSED_REALTIME_WAKEUP -> ELAPSED_REALTIME,callingPackage = android,triggerAtTime = 721599,listenerTag = SoftApManager Soft AP Send Message Timeout 12-21 15:41:33.976 D/SoftApManager( 1081): Timeout message scheduled这段log表示什么
时间: 2023-02-16 12:47:55 浏览: 298
这段 log 中似乎描述了 WiFi 相关的一些操作。其中,
- "startScan" 和 "Scan request from com.autonavi.amapauto throttled" 描述了有应用请求扫描 WiFi,但是被限制了。
- "STA 28:c7:09:63:e0:a3 IEEE 802.11: disassociated" 和 "Station 28:c7:09:63:e0:a3 disassociated from hotspot" 描述了一个 WiFi 设备 (STA) 从热点 (hotspot) 断开了连接。
- "Number of associated stations changed: 0" 描述了连接到热点的设备数量变为了 0。
- "Timeout message scheduled" 描述了已设置了一个超时消息。
但是,由于这段 log 中缺少上下文信息,我不能提供更多具体的解释。
相关问题
static_library("iot_wifi") { sources = [ "iot_wifi.c", "iot_netcfg.c", "iot_softap.c", ] cflags = [ "-Wno-unused-variable" ] cflags += [ "-Wno-unused-but-set-variable" ] cflags += [ "-Wno-unused-parameter" ] include_dirs = [ "//kernel/liteos_m/components/net/lwip-2.1/enhancement/include/lwip", "//kernel/liteos_m/components/net/lwip-2.1/porting/include/", "//base/hiviewdfx/hilog_lite/interfaces/native/innerkits/hilog", "//foundation/communication/wifi_lite/interfaces/wifiservice/", "//third_party/mbedtls/include/mbedtls", "//kernel/liteos_m/kal/cmsis", "//third_party/cJSON", "//utils/native/lite/include", "../inc", ] deps = [ "//base/hiviewdfx/hilog_lite/frameworks/featured:hilog_static", ] }
这是一个名为 "iot_wifi" 的静态库的构建配置。它包含了以下源文件:
- iot_wifi.c
- iot_netcfg.c
- iot_softap.c
构建选项中设置了一些编译标志,如忽略未使用的变量和参数。包含的头文件路径如下:
- //kernel/liteos_m/components/net/lwip-2.1/enhancement/include/lwip
- //kernel/liteos_m/components/net/lwip-2.1/porting/include/
- //base/hiviewdfx/hilog_lite/interfaces/native/innerkits/hilog
- //foundation/communication/wifi_lite/interfaces/wifiservice/
- //third_party/mbedtls/include/mbedtls
- //kernel/liteos_m/kal/cmsis
- //third_party/cJSON
- //utils/native/lite/include
- ../inc
此外,该静态库依赖于另一个名为 "hilog_static" 的静态库,路径为:
- //base/hiviewdfx/hilog_lite/frameworks/featured:hilog_static
android11上wifi开发完整案例
以下是一个在Android 11上的WiFi开发完整案例:
1. Manifest文件配置权限和服务。
```xml
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<service
android:name="com.example.wifiservice.WifiService"
android:enabled="true"
android:exported="false"/>
```
2. 创建Service类,实现WifiManager的各种相关操作。其中需要注意的是,在Android 11及以上版本,通过WifiManager获取到的Wifi信息已经不再包含SSID等敏感信息,需要通过registerNetworkCallback或者扫描接口获取到。
```java
public class WifiService extends Service {
private final String TAG = WifiService.class.getSimpleName();
private WifiManager wifiManager;
private Context context;
private WifiScanResultListener scanResultListener;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "WifiService onCreate");
wifiManager = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
context = this.getApplicationContext();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "WifiService onStartCommand");
if (intent != null) {
String action = intent.getAction();
if (action != null && action.equals("start_scan")) {
startScan();
}
}
return START_STICKY;
}
/**
* 开始扫描Wifi
*/
private void startScan() {
wifiManager.startScan();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
registerNetworkCallback();
} else {
scanResultListener = new WifiScanResultListener();
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
context.registerReceiver(scanResultListener, filter);
}
}
/**
* Android 11及以上版本通过registerNetworkCallback获取Wifi信息
*/
@RequiresApi(api = Build.VERSION_CODES.R)
private void registerNetworkCallback() {
NetworkRequest.Builder builder = new NetworkRequest.Builder();
builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
final ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
connectivityManager.registerNetworkCallback(builder.build(),
new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
Log.d(TAG, "onAvailable network=" + network);
List<ScanResult> scanResults = wifiManager.getScanResults();
if (scanResults != null && scanResults.size() > 0) {
for (ScanResult scanResult : scanResults) {
Log.d(TAG, "onAvailable scanResult=" + scanResult.toString());
}
}
}
});
}
}
/**
* Android 11以下版本通过扫描接口获取Wifi信息
*/
private class WifiScanResultListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null && action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
List<ScanResult> scanResults = wifiManager.getScanResults();
if (scanResults != null && scanResults.size() > 0) {
for (ScanResult scanResult : scanResults) {
Log.d(TAG, "onReceive scanResult=" + scanResult.toString());
}
}
}
}
}
}
```
3. 在Activity中控制Service的开启和关闭。
```java
public class MainActivity extends AppCompatActivity {
private Button btnStart, btnStop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStart = findViewById(R.id.btn_start);
btnStop = findViewById(R.id.btn_stop);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, WifiService.class);
intent.setAction("start_scan");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intent);
} else {
startService(intent);
}
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, WifiService.class);
stopService(intent);
}
});
}
}
```
以上就是一个在Android 11上的WiFi开发完整案例,通过使用Service和WifiManager,实现了对WiFi的扫描和获取WiFi信息的功能,并根据不同Android版本做了不同的处理。