1.实现检测网络状态,当bug提交,获取密码时,解压成功后提交密码这些需要网络的时候就检测网络状态

2.实现了无任何网络连接时,包括没有登录的校园网下,不执行网络线程
master
ThankVinci 4 years ago
parent 249d033912
commit 27da9a5dd1

@ -4,6 +4,7 @@
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/icon"

@ -2,22 +2,25 @@ package com.thankvinci.CloudKey.Fragment;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
import androidx.fragment.app.Fragment;
import com.thankvinci.CloudKey.NetUtils.NetCheck;
import com.thankvinci.CloudKey.NetUtils.NetHandler;
import com.thankvinci.CloudKey.NetUtils.NetThread;
import com.thankvinci.CloudKey.R;
public class BugSubFragment extends Fragment {
private Fragment fragment;
public BugSubFragment(){
super(R.layout.bug_sub_fragment);
}
@ -35,6 +38,7 @@ public class BugSubFragment extends Fragment {
softVerEdit.setText(getAppInfo());
andrVerEdit .setText(""+android.os.Build.VERSION.RELEASE);
submit.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(View v) {
String softVer,andrVer,bug;
@ -45,6 +49,10 @@ public class BugSubFragment extends Fragment {
Toast.makeText(getActivity(),"一定要全部填写完才能提交哦~",Toast.LENGTH_SHORT).show();
return ;
}
if("无网络".equals(NetCheck.getNetStatus(v.getContext()))){
Toast.makeText(getActivity(),"反馈失败,当前网络不畅通"+NetCheck.getNetStatus(v.getContext()),Toast.LENGTH_SHORT).show();
return ;
}
Handler handler = new NetHandler(getActivity(),fragment);
StringBuilder builder = new StringBuilder();
builder.append("http://1.14.144.194:8080/cscp/cscp?para0=subBug&para1=");

@ -24,6 +24,7 @@ import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import com.thankvinci.CloudKey.Files.FileUtils;
import com.thankvinci.CloudKey.NetUtils.NetCheck;
import com.thankvinci.CloudKey.NetUtils.NetHandler;
import com.thankvinci.CloudKey.NetUtils.NetThread;
import com.thankvinci.CloudKey.R;
@ -151,9 +152,14 @@ public class UnzipDialogFragment extends DialogFragment {
}
});
getPWD.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(View v) {
//获取密码
if("无网络".equals(NetCheck.getNetStatus(v.getContext()))){
Toast.makeText(getActivity(),"获取失败,当前网络不畅通"+NetCheck.getNetStatus(v.getContext()),Toast.LENGTH_SHORT).show();
return ;
}
StringBuilder builder = new StringBuilder();
builder.append("http://1.14.144.194:8080/cscp/cscp?para0=query&para1=");
builder.append(md5);

@ -1,4 +1,45 @@
package com.thankvinci.CloudKey.NetUtils;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.os.Build;
import android.util.Log;
import androidx.annotation.RequiresApi;
import java.io.IOException;
public class NetCheck {
@RequiresApi(api = Build.VERSION_CODES.M)
public static String getNetStatus(Context context){
ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
if(networkInfo == null || !networkInfo.isConnected() || !networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)){
return "无网络";
}
switch (networkInfo.getType()){
case ConnectivityManager.TYPE_WIFI:
return "当前连接到WiFi网络";
case ConnectivityManager.TYPE_MOBILE:
return "当前连接到移动网络";
default:
return "当前连接到未知网络";
}
}
public static boolean isOnline(){
Runtime runtime = Runtime.getRuntime();
try {
Process ipProcess = runtime.exec("ping -c 3 cn.bing.com");
int exitValue = ipProcess.waitFor();
Log.i("Avalible", "Process:"+exitValue);
return (exitValue == 0);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
return false;
}
}

@ -29,7 +29,7 @@ public class NetThread implements Runnable {
@Override
public void run(){
Message msg = new Message();
String data = getNetWork(strUrl);Log.d("TAG:",data);
String data = getNetWork(strUrl);
Bundle dataPackage = new Bundle();
if (data.equals("查无结果") || data.equals("反馈成功,感谢支持") || data.equals("反馈失败,请稍后重试") || data.equals("查询失败") || data.equals("插入成功,感谢分享") || data.equals("插入失败") || data.equals("无效参数")){
msg.what = -1;
@ -52,6 +52,9 @@ public class NetThread implements Runnable {
try{
URL url = new URL(str_url);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
if(connection == null){
return "连接失败,请检查网络状态";
}
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(8000);

@ -1,14 +1,18 @@
package com.thankvinci.CloudKey.Utils;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
import androidx.fragment.app.Fragment;
import com.thankvinci.CloudKey.Fragment.UnzipDialogFragment;
import com.thankvinci.CloudKey.NetUtils.NetCheck;
import com.thankvinci.CloudKey.NetUtils.NetHandler;
import com.thankvinci.CloudKey.NetUtils.NetThread;
@ -26,6 +30,7 @@ public class FileHandler extends Handler {
this.activity = activity;
this.fragment = fragment;
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
@ -44,6 +49,10 @@ public class FileHandler extends Handler {
((UnzipDialogFragment)fragment).dismiss();
Toast.makeText(activity,"解压完成",Toast.LENGTH_SHORT).show();
//当dialog的checkbox为选中时并且密码来源不是数据库时再并且解压成功时再并且密码输入框不为空时,即用户同意输入解压密码解压成功后把密码上传到数据库
if("无网络".equals(NetCheck.getNetStatus(activity))){
Toast.makeText(activity,"上传密码失败,当前网络不畅通"+NetCheck.getNetStatus((Context)activity),Toast.LENGTH_SHORT).show();
return ;
}
if(((UnzipDialogFragment)fragment).getCheck() && !((UnzipDialogFragment)fragment).getFromSQL() && ((UnzipDialogFragment)fragment).getSuccessful() && !((UnzipDialogFragment)fragment).pwdIsEmpty()){
StringBuilder builder = new StringBuilder();
builder.append("http://1.14.144.194:8080/cscp/cscp?para0=update&para1=");

@ -311,3 +311,12 @@ FileHandler负责将获取到的md5码发到NetThread,然后将得到的密码
并不是在onCreate()后dialog就销毁,其实在onStart()中还能获取到dialog,进而获取到已经生成的BUTTON_POSITIVE,但是传出去还是已经销毁的状态,不过已经够了,只要重写按钮功能,不关闭dialog就行,然后通过线程调用去关闭dialog就OK
**2021/6/13**
实现检测网络状态,当bug提交,获取密码时,解压成功后提交密码这些需要网络的时候就检测网络状态
实现了无任何网络连接时,不执行网络线程,但是存在明明有WiFi连接,但是无网络的状态,就是我们连接校园网没有登录的时候,这种时候要不执行网络线程
解决方法:https://blog.csdn.net/qq_39200790/article/details/80430743
获取NetworkCapabilities对象,当前活跃网络的VALIDATED标记是否存在
Loading…
Cancel
Save