android wifi布局,如何实现Android状态栏的Wi-Fi搜索周边的列表和周围Wi-Fi强度图标切换?...

博主在尝试实现类似Android系统状态栏Wi-Fi信号强度显示及列表扫描结果的功能,使用ListView而非RecyclerView。遇到的问题包括:1)列表项无法正确显示Wi-Fi信号强度的图标;2)点击按钮后信号强度图标变化的代码未生效。在布局文件中,ImageView未能正确显示信号强度图标。同时,代码中关于Wi-Fi状态监听的部分未能正确关联到信号强度的显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我想要实现例如Android状态栏以及筛选列表一样:链接之后就显示当前Wi-Fi信号状态图标,扫描之后进行周围链接的信号强度的显示。

第一个问题

实现的结果是都在一行。

在hashmap遍历中,我尝试获得多个效果:

代码:

this.adapter = new SimpleAdapter( //设置适配器为简单适配器

MainActivity.this, //获取主要实例

arraylist, R.layout.wifi_scanresults_row, //适配器获取布局

new String[]{ITEM_KEY},

new int[]{R.id.wifi_item}); //设置资源ID为textView

/*new int[]{R.id.wifi_security};

new int[]{R.id.wifi_StrongImage});*/

listView.setAdapter(this.adapter); //设置适配器

...

@SuppressLint("StringFormatInvalid")

@Override

public void onClick(View v) {

arraylist.clear(); //清除数据列表

wifi.startScan(); //开始扫描附近Wi-Fi

try { //异常捕获

size = size - 1;

while (size >= 0) { //当size大于等于0时

HashMap item = new HashMap<>();

//wifiname.setText(getString(R.string.wifi_name, "" + results.get(size).SSID));

//wifisec.setText(getString(R.string.wifi_security, "" + results.get(size).capabilities));

// wifiImage.setImageLevel(getLayoutInflater(R.layout.wifi_sel, "" + listView.get()));

item.put(ITEM_KEY, results.get(size).SSID + "\n" + results.get(size).capabilities); //获取Wi-Fi结果

arraylist.add(item); //添加wifi进列表

size--; //size自减

adapter.notifyDataSetChanged(); //通知数据设置改变

}

} catch (Exception e) //捕获异常

{ }

我的xml:

main.wifi_connect,主要的扫描结果,参考第一个链接,使用了hashmap遍历的方法获取。

scan_resuals_row:扫描结果的布局,我尝试做出类似于系统扫描Wi-Fi列表那样,可是imageview显示不出。

参考链接:Android连接指定Wifi的方法

不过他用的是RecyclerView,我是用的是第一个链接里的ListView,切换的成本是否很大?

代码:

android:layout_width="match_parent"

android:layout_height="...dp">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal"

android:gravity="center_vertical"

android:paddingStart="10dp"

android:paddingEnd="10dp"

>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:gravity="center_vertical"

android:paddingStart="10dp"

android:paddingEnd="10dp"

>

android:id="@+id/wifi_name"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:singleLine="true"

android:text="@string/wifi_name"

android:textSize="18sp" />

android:id="@+id/wifi_security"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/wifi_security"

android:textSize="14sp"/>

android:id="@+id/wifi_StrongImage"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_marginTop="10dp"

android:layout_marginBottom="10dp"

android:scaleType="fitXY"

/>

显示的效果:

1460000016790947?w=586&h=190

图为选择ImageView的效果。

第二个问题

我创建的xml:

selector.xml:切换信号强度的图标的选择器,参考第二个链接。

android:state_pressed="true"

android:drawable="@drawable/ic_signal_wifi_4_bar_black_24dp">

android:state_pressed="false"

android:drawable="@drawable/ic_perm_scan_wifi_black_24dp">

android:state_window_focused="false"

android:drawable="@drawable/ic_signal_wifi_statusbar_null_black_26x24dp">

目前我的代码仅仅是点击button变化的代码,并没有做到获得周围的Wi-Fi代码,或许是在代码中被自己注释的原因,或许是只可以获得周边的Wi-Fi,但和第一个问题一样布局的imageview没显示出来。

在声明wifi消息处理过程中,Wi-Fi不同state分别是有无反应,是否连接上,这与Wi-Fi的值(就是信号强度)有什么关系?

// 声明wifi消息处理过程

private BroadcastReceiver wifiIntentReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

int wifi_state = intent.getIntExtra("wifi_state", 0);

int level = Math.abs(((WifiManager)getSystemService(WIFI_SERVICE)).getConnectionInfo().getRssi());

switch (wifi_state) {

case WifiManager.WIFI_STATE_DISABLING:

wifi_image.setImageResource(R.drawable.wifi_sel);

wifi_image.setImageLevel(level);

break;

case WifiManager.WIFI_STATE_DISABLED:

wifi_image.setImageResource(R.drawable.wifi_sel);

wifi_image.setImageLevel(level);

break;

case WifiManager.WIFI_STATE_ENABLING:

wifi_image.setImageResource(R.drawable.wifi_sel);

wifi_image.setImageLevel(level);

break;

case WifiManager.WIFI_STATE_ENABLED:

wifi_image.setImageResource(R.drawable.wifi_sel);

wifi_image.setImageLevel(level);

break;

case WifiManager.WIFI_STATE_UNKNOWN:

wifi_image.setImageResource(R.drawable.wifi_sel);

wifi_image.setImageLevel(level);

break;

}

}

};

谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值