Android盒子开发,获取网络的信息(热点,WIFI,有线)

本文讲述了在Android盒子开发中获取网络信息,包括WIFI、热点和有线连接的挑战。作者分享了如何通过修改文件权限、反射技术来获取SSID以及管理热点配置的实践经验,提供了一个完整的工具类代码供开发者参考。
摘要由CSDN通过智能技术生成

Android盒子开发,网络信息的获取,比手机要困难许多。比如我们要获取网卡地址,IP地址,MAC等,有的系统没有直接接口
盒子的Launcher中需要接管便携式WIFI热点的开启,那么就需要获取SSID,为了保证我们Launcher中获取的SSID和系统一致。
说多了,都是泪啊。
热点的信息存放在/data/misc/wifi/hostapd.conf文件下,首先我想到的是使用IO流去读取,但是没有Root权限是无法读取的,于是乎想了一个更新坑爹的方法,自己修改该文件的权限,具体代码如下

**
 * @author xiongchengguang
 * @ClassName ReadConfig
 * @Descripton 读取WIFI热点的名字
 * @date 2016229日下午3:16:23
 */
public class ReadConfig {
   
    private static final String TAG = "ReadConfig";

    public static String loadFileAsString() {
        getRootPermission();
        StringBuffer sb = new StringBuffer();
        String ssid ="";
        try {
            BufferedReader reader = new BufferedReader(new FileReader("/data/misc/wifi/hostapd.conf"));
            char[] buf = new char[8192];
            int len = 0;
            while ((len = reader.read(buf)) != -1) {
                String str = String.valueOf(buf, 0, len);
                sb.append(str);
            }
            reader.close();
            int index=sb.toString().indexOf("ssid")+5;
            int end=sb.toString().indexOf("channel");
            ssid=sb.toString().substring(index, end);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.d(TAG, ssid);
        return ssid;
    }


    /**
     * 修改系统文件权限
     */
    private static void getRootPermission(){
        Process process;
        DataOutputStream dataOutputStream;
        try {
            String cmd1="chmod 777 /data";
            String cmd2="chmod 777 /data/misc/";
            String cmd3="chmod 777 /data/misc/wifi/";
            String cmd4="chmod 777 /data/misc/wifi/hostapd.conf";
            process=Runtime.getRuntime().exec("su");
            dataOutputStream=new DataOutputStream(process.getOutputStream());
            dataOutputStream.writeBytes(cmd1+"\n");
            dataOutputStream.writeBytes(cmd2+"\n");
            dataOutputStream.writeBytes(cmd3+"\n");
            dataOutputStream.writeBytes(cmd4+"\n");
            dataOutputStream.writeBytes("exit\n");
            dataOutputStream.flush();
            process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

但是这样就会出现一个问题,有的时候能读取到,有的时候不行的。这样程序丢给用户有损我天朝的程序员的脸面啊
脑门一拍,把Setting的源码打开看看不就好了吗
这里写图片描述
那我们来看下别人具体实现,这不正是系统设置的UI布局吗上面一个TextVie用户,下面一个EditText输入框吗
这里写图片描述
那我们下面开始使用上面的id来全局搜索 (Ctrl+H ->wifi_ap_dialog)

/**
 * Dialog to configure the SSID and security settings
 * for Access Point operation
 */
public class WifiApDialog extends AlertDialog implements View.OnClickListener,
        TextWatcher, AdapterView.OnItemSelectedListener {
   

    static final int BUTTON_SUBMIT = DialogInterface.BUTTON_POSITIVE ;

    private final DialogInterface.OnClickListener mListener;

    public
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值