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

我想要实现例如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;

}

}

};

谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现这个功能需要通过 Android 的 API 来获取当前的网络状态和热点信息,并且需要动态注册网络状态的变化。以下是一个简单的实现过程: 1. 在 AndroidManifest.xml 文件添加权限: ```xml <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> ``` 2. 创建一个 BroadcastReceiver 类来监听网络状态的变化,并在 AndroidManifest.xml 文件注册: ```java public class WifiStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (networkInfo.isConnected()) { WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int frequency = wifiInfo.getFrequency(); if (frequency > 2400 && frequency < 2500) { // 2.4GHz // 更新热点图标下方的文本信息 } else if (frequency > 4900 && frequency < 5900) { // 5GHz // 更新热点图标下方的文本信息 } else { // 没有连接到Wi-Fi } } else { // 没有连接到Wi-Fi } } } ``` 在 AndroidManifest.xml 文件注册 BroadcastReceiver 类: ```xml <receiver android:name=".WifiStateReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver> ``` 3. 在 Activity 启动和关闭热点,并更新热点图标下方的文本信息: ```java WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); wifiManager.setWifiEnabled(false); // 关闭 Wi-Fi wifiManager.setWifiEnabled(true); // 开启 Wi-Fi WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int frequency = wifiInfo.getFrequency(); if (frequency > 2400 && frequency < 2500) { // 2.4GHz // 更新热点图标下方的文本信息 } else if (frequency > 4900 && frequency < 5900) { // 5GHz // 更新热点图标下方的文本信息 } else { // 没有连接到Wi-Fi } ``` 这样,当热点开启时,热点图标下方的文本信息就会显示对应的频段。同时,当网络状态发生变化时,BroadcastReceiver 类也会监听到并更新热点图标下方的文本信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值