ArrayList<HashMap<String, Object>> itemList;
btnSelectWiFi.setOnClickListener(v -> {
try {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle("WiFi");
ListView list = new ListView(activity);
list.setAdapter(new CustomListAdapter(activity));
list.setOnItemClickListener((arg0, arg1, position, arg3) -> {
if (dialog.isShowing()) {
dialog.dismiss();
tvNetworkName.setText((String) itemList.get(position).get("SSID"));
networkName = (String) itemList.get(position).get("SSID");
wifiSecurity = (String) itemList.get(position).get("security");
networkSettings.setVisibility(View.VISIBLE);
}
});
builder.setView(list);
dialog = builder.create();
dialog.show();
} catch (Exception e) {
e.printStackTrace();
}
这里是填写可用 WiFi 连接列表的代码:
public class CustomListAdapter extends BaseAdapter {
private final LayoutInflater inflater;
public CustomListAdapter(Context context) {
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
initListItems();
}
public void initListItems() {
itemList = new ArrayList<>();
List<ScanResult> scanResultsList = new ArrayList<>(); //wifiManager.getConfiguredNetworks();
List<String> addedSSID = new ArrayList<>();
for (ScanResult result : results) {
if (!addedSSID.contains(result.SSID) && (result.SSID != null && !result.SSID.toLowerCase().contains("hh-"))) {
scanResultsList.add(result);
addedSSID.add(result.SSID);
}
}
for (ScanResult scanResult : scanResultsList) {
try {
// exclude unnamed wifi
if (scanResult.SSID == null || scanResult.SSID.length() == 0)
continue;
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("SSID", scanResult.SSID.replace("\"", ""));
map.put("BSSID", scanResult.BSSID);
map.put("wifiConfiguration", scanResult);
map.put("selected", false);
itemList.add(map);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public int getCount() {
return itemList.size();
}
@Override
public Object getItem(int arg0) {
return itemList.get(arg0);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MainListHolder mHolder;
View v = convertView;
if (convertView == null) {
mHolder = new MainListHolder();
v = inflater.inflate(R.layout.wifi_entry_item, null);
mHolder.tvNetworkName = v.findViewById(R.id.networkName);
v.setTag(mHolder);
} else {
mHolder = (MainListHolder) v.getTag();
}
HashMap<String, Object> item = itemList.get(position);
mHolder.tvNetworkName.setText((String) item.get("SSID"));
return v;
}
class MainListHolder {
private TextView tvNetworkName;
}
}
当我在某些情况下按下按钮并且仅针对少数 Android 手机时,我得到了这个神秘的错误:
2022-01-26 13:12:42.383 E/InputConnectionWrapper: InputConnectionWrapper.waitForInputConnectionFutureInternal():1528 Failed to get the input connection call's result.
java.util.concurrent.TimeoutException: Waited 100 milliseconds (plus 198307 nanoseconds delay) for lvf@fa860f3[status=PENDING, info=[task=[running=[RUNNING ON ICWrapper-1], hfn@72d81b0]]]
at lsg.get(PG:50)
at hfx.h(PG:2)
at hfx.g(PG:2)
at nxc.m(PG:6)
at hgg.C(PG:1)
at hgg.o(PG:1)
at hgg.q(PG:5)
at hfx.b(PG:14)
at cvz.onUpdateSelection(PG:5)
at android.inputmethodservice.InputMethodService$InputMethodSessionImpl.updateSelection(InputMethodService.java:1171)
at android.inputmethodservice.IInputMethodSessionWrapper.executeMessage(IInputMethodSessionWrapper.java:111)
at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8653)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
2022-01-26 13:12:42.383 W/InputConnectionWrapper: InputConnectionWrapper.recordDuration():1491 IPC IC_GET_SURROUNDING_TEXT took 103 ms
真的,我无法理解这个堆栈跟踪,有什么帮助吗?
更新
这段代码正在打开一个对话框,用于选择 WiFi 连接。
此错误仅发生在特定手机(目前)华为。