2.2.284,我们已经让“小熊派护花使者”项目赚了 原创 精华

LinMeng林孟
发布于 2022-8-16 00:08
浏览
4收藏

我们的上一篇文章:https://ost.51cto.com/posts/15202
我们的GitHub:点我
我们的Gitee:点我
发行版页面:点我
(新增)Web-IDE页面:点我
8月已过半,当然,我们的项目也跟着咕了半~,这期间,我们的项目收到了OSCS开源安全社区的邮件通知,我们的项目自动收录了进去且得到了他们的安全检测结果!
报告地址:点我进去看看吧~
2.2.284,我们已经让“小熊派护花使者”项目赚了-鸿蒙开发者社区
++接下来的内容,才叫正篇,是我们2.2更新的代码层面:++
首先,做一款“正常启动”的入口,要与“快速启动”有强烈区分和适用更广。
所以我们就是直接怼一个填写登录的AlertDialog,代码如下:

tableLayout = (TableLayout) getLayoutInflater().inflate(layout.alertdialog_login,null);
tableLayoutII = (TableLayout) getLayoutInflater().inflate(layout.alertdialog_wifissid,null);
tableLayoutIII = (TableLayout) getLayoutInflater().inflate(layout.alertdialog_wifisecret,null);
//非常关键,让EditText属于MainActivity上面的TableLayout,否则会报错!!
Edittext_Iam_domain_name = tableLayout.findViewById(id.Iam_domain_name);
Edittext_Iam_name = tableLayout.findViewById(id.Iam_name);
Edittext_Iam_password_input = tableLayout.findViewById(id.Iam_password_input);
//弹窗代码了,最为重要。
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this,R.style.ConsoleDialog);
alertDialog.setTitle("键入"+WiFi()+"的Secret");
alertDialog.setIcon(R.drawable.a1);
alertDialog.setView(tableLayoutIII);
alertDialog.setPositiveButton("输入完啦", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
    //两行,处理Wi-Fi信息,一行,处理正常启动JSON,再来两行,去NFC页面开启NFC写入数据。
        WPA_address_normal = WiFi();
        WPA_pwd_normal = String.valueOf(Edittext_WPA_Secret.getText());
        ToBearPiJSON = "{\"product\": \""+ Product_name +"\",\"device_id\": \""+Device_info+"\",\"secret\": \""+ Device_secret +"\",\"ssid\": \""+ WPA_address_normal +"\",\"pwd\": \""+ WPA_pwd_normal +"\"}";
        Intent normali = new Intent(MainActivity.this,NFCActivity.class);
        startActivity(normali);
    }
});
alertDialog.create().show();

我们在初始化的代码,踩了数十天的坑,原来是我们一直绕不过来,一个控件要对应一个Layout,但是必须要在那里的Layout寻找R.id,不然是会报错空值的!
解决了这个坑,我们剩下的功能,就是逻辑上的问题了。
当然,让我们越写越难受的,就是接下来的:设备连入Wi-Fi后APP读取Wi-Fi SSID
首先,由于Android9.0及以上的设备,得采用新的一套写法读取Wi-Fi SSID。新的一套必须得开启GPS定位然后才能读取Wi-Fi SSID。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
private String WiFi() {
        //以下为获取Wifi的SSID方法,Secret我们不获取,这样做的话软件得ROOT
        //(或者各种恶心的办法,比如捕获屏幕得到分享二维码读JSON,我们不做,因为我们是浩瀚银河)
        //搞一个弹窗,输入得到的WiFi名称的Wi-Fi Secret,因为要组成NFC的JSON内容,给小熊派护花使者。
        String WPAAddress = "";
        WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        if (wifiInfo != null) {
            WPAAddress = wifiInfo.getSSID();
            Log.v("浩瀚银河:","Wi-Fi名称:"+WPAAddress);
            WPA_address_normal = WPAAddress;
            if (WPAAddress.length() > 2 && WPAAddress.charAt(0) == '"' && WPAAddress.charAt(WPAAddress.length() - 1) == '"') {
                WPAAddress = WPAAddress.substring(1,WPAAddress.length() - 1);
                if (WPAAddress.equals("<unknown ssid>")) {
                    ConnectivityManager connManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
                    assert connManager != null;
                    NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
                    if (networkInfo.isConnected()) {
                        if (networkInfo.getExtraInfo() != null) {
                            WPAAddress = networkInfo.getExtraInfo().replace("\"", "");
                            Log.v("浩瀚银河:","Wi-Fi名称:"+WPAAddress);
                            WPA_address_normal = WPAAddress;
                            return WPA_address_normal;
                        }
                    }
                }
            }
        }
        return WPA_address_normal;
    }

这里面的代码得分开看,首先:为了能兼顾新Android设备和旧Android设备,我们把两套的Wi-Fi SSID读取,都写入进去了,并且经过测试,是没有任何问题。而且这代码,我们在Android 11设备上已经经过多次灰度测试,并无明显Bug。
从这一段if (WPAAddress.equals("<unknown ssid>")) {开始,上半段为Android9.0以下设备读取方法,下半段为Android9.0以上设备读取方法。
然后这一次,我们就索要了Wi-Fi、定位等权限,这也是无奈之举,我们更希望能够这样来减少“正常启动”敲键盘的操作。
当然,我们尊重所有人隐私,代码里面,没有任何Wi-Fi Secret获取和上报到后台任意服务器行为!所有的这些操作我们公开源码透明讲述。
所以,这就是我们2.2的更新————让“正常启动”受众更多人、让“正常启动”更趋于小熊派护花使者微信小程序。
接下来的2.3更新,我们会提供调试API账号本地加密保存优化快速启动(预计2.4)

  • 调试API功能是因为,我们灰度测试期间,有使用很多不同运营商的网络进行测试,有一流程成功的也有不成功的时候。那么,我们推出这个就是希望能够让用户“自测”一下当前网络是否可以让APP很好的使用。
    (因为我们很多的操作,基本上一半为数据处理,一半为Huawei.java的华为函数)
  • 账号本地保存我们一定会做,正常启动目前还是第一版,肯定有需要优化的地方,这个就是。
  • 优化快速启动是因为,我们发现快速启动中有不少代码是可以删减和性能减少的。
    那么我们又又又写完了一篇文章了哈哈哈,请各位敬请期待我们的新版本吧~ :)
    (不过最近我可是得接手学校技能竞赛的项目了,两头跑实在有时候受不住,所以我会尽量保持更新!)

End.
2022.8.16 0:07

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-8-16 00:09:49修改
6
收藏 4
回复
举报
13条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

好奇100的安全评分是啥水平,这个OSCS主要会检测哪些呢?

回复
2022-8-16 10:08:27
一緑向北
一緑向北

新Android设备和旧Android设备是按版本分的吗?

回复
2022-8-16 10:21:30
LinMeng林孟
LinMeng林孟 回复了 红叶亦知秋
好奇100的安全评分是啥水平,这个OSCS主要会检测哪些呢?

目前还不知道呢,不过墨菲的检测应该有一定说服力的~

回复
2022-8-16 11:22:09
LinMeng林孟
LinMeng林孟 回复了 一緑向北
新Android设备和旧Android设备是按版本分的吗?

目前分界线是Android9来区分新设备和旧设备(WiFi代码),当然,Android权限的开发一直都在变这个都是说不准的。

回复
2022-8-16 11:23:26
一緑向北
一緑向北 回复了 LinMeng林孟
目前分界线是Android9来区分新设备和旧设备(WiFi代码),当然,Android权限的开发一直都在变这个都是说不准的。

好的,感谢回复。

回复
2022-8-16 11:48:27
殇时云起
殇时云起

楼主大学生活可真是充实。

回复
2022-8-16 14:10:12
Whyalone
Whyalone 回复了 殇时云起
楼主大学生活可真是充实。

与其临渊羡鱼,不如退而结网 👍👍

回复
2022-8-16 16:39:22
笨笨的婧婧
笨笨的婧婧

"赚了"是指可以盈利了吗?

回复
2022-8-17 15:17:13
LinMeng林孟
LinMeng林孟 回复了 笨笨的婧婧
"赚了"是指可以盈利了吗?

项目从不打算盈利,具体可以看看我们的readme

回复
2022-8-17 21:03:08
笨笨的婧婧
笨笨的婧婧 回复了 LinMeng林孟
项目从不打算盈利,具体可以看看我们的readme

明白了,永久开源,给楼主点赞👍

回复
2022-8-19 12:01:36
0aaron
0aaron

作者是咕了,而我的项目是还没开始

回复
2022-8-19 15:29:44
LinMeng林孟
LinMeng林孟 回复了 笨笨的婧婧
明白了,永久开源,给楼主点赞👍

不仅仅永久开源,而且我们还会继续维护下去。毕竟是我们拿的出去写的出来的解决方案,也是希望能够通过一己之力,活跃openharmony和android的生态。

回复
2022-8-22 13:28:43
LinMeng林孟
LinMeng林孟 回复了 笨笨的婧婧
明白了,永久开源,给楼主点赞👍

其实项目我们就一个小小的要求,就是二次开发时要求署名罢了,而且我们有自己写了好久的中文协议。

回复
2022-8-22 13:29:38
回复
    相关推荐