package com.lwz.selectnetworkdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.stream.Collectors;
public class MainActivity extends AppCompatActivity {
private final String NETWORK_STATE_CHANGE = "android.net.conn.CONNECTIVITY_CHANGE";
RadioGroup radioGroup;
RadioButton rb_default;
RadioButton rb_wifi;
RadioButton rb_ethernet;
EditText et_url;
TextView tv_info;
TextView tv_ip_show;
TextView tv_ip_wifi;
TextView tv_ip_eth0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LogUtil.inform("");
setContentView(R.layout.activity_main);
initView();
initData();
initEvent();
}
private void initView() {
radioGroup = findViewById(R.id.radioGroup);
rb_default = findViewById(R.id.rb_default);
rb_wifi = findViewById(R.id.rb_wifi);
rb_ethernet = findViewById(R.id.rb_ethernet);
et_url = findViewById(R.id.et_url);
tv_info = findViewById(R.id.tv_info);
tv_ip_show = findViewById(R.id.tv_ip_show);
tv_ip_wifi = findViewById(R.id.tv_ip_wifi);
tv_ip_eth0 = findViewById(R.id.tv_ip_eth0);
}
private void initData() {
initReceiver();
et_url.setText("https://www.baidu.com");
refreshIp();
}
private void initEvent() {
}
//点击连接网络
public void connectNetwork(View view) {
tv_info.setText("");
int selectNetType = 0;
if (rb_ethernet.isChecked()) {
selectNetType = 1;
} else if (rb_wifi.isChecked()) {
selectNetType = 2;
}
int finalSelectNetType = selectNetType;
new Thread(new Runnable() {
@Override
public void run() {
String url = et_url.getText().toString();
testNetwork(finalSelectNetType, url);
}
}).start();
}
private void testNetwork(int netType, String url) {
LogUtil.debug("testNetwork netType= " + netType);
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder builder = new NetworkRequest.Builder();
// 设置指定的网络传输类型
// wifi: NetworkCapabilities.TRANSPORT_WIFI
// 有线网络: NetworkCapabilities.TRANSPORT_ETHERNET
if (netType == 1) {
builder.addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET);
} else if (netType == 2) {
// 设置感兴趣的网络功能
builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
}
NetworkRequest request = builder.build();
ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
LogUtil.debug("已根据功能和传输类型找到合适的有线网络");
LogUtil.debug("testnet onAvailable network = " + network.toString() );
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_info.setText("请求网络的network id = " + network.toString());
}
});
// 通过network.openConnection 来获取URLConnection
try {
HttpURLConnection urlConnection = (HttpURLConnection) network.openConnection(new URL(url));
if (urlConnection != null) {
int responseCode = urlConnection.getResponseCode();
String responseMessage = urlConnection.getResponseMessage();
LogUtil.debug("testEthernetonAvailable responseCode = " + responseCode);
LogUtil.debug("testEthernet onAvailable responseMessage = " + responseMessage);
InputStream inputStream = urlConnection.getInputStream();
String result = new BufferedReader(new InputStreamReader(inputStream))
.lines().parallel().collect(Collectors.joining("\n"));
LogUtil.debug("testEthernet onAvailable result = " + result);
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_info.append(" ,Time :" + TimeUtils.getTimeString() + " result : \n " + result);
}
});
}
} catch (IOException e) {
LogUtil.error("testEthernet onAvailable error = " + e.getMessage());
}
connectivityManager.unregisterNetworkCallback(this);
}
};
connectivityManager.registerNetworkCallback(request, callback);
// connectivityManager.requestNetwork(request, callback);
}
public void initReceiver() {
LogUtil.debug("");
final IntentFilter filter = new IntentFilter();
filter.addAction(NETWORK_STATE_CHANGE);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
registerReceiver(mReceiver, filter);
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
// LogUtil.debug("network action = " + action);
if (action.equals(NETWORK_STATE_CHANGE) || action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
LogUtil.debug("network state change");
String ipEthernetString = FunctionUtil.getIpAddress(MainActivity.this, false);
LogUtil.debug("ipEthernetString = " + ipEthernetString);
String ipWifiString = FunctionUtil.getIpAddress(MainActivity.this, true);
LogUtil.debug("ipWifiString = " + ipWifiString);
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
}
//点击刷新显示ip
public void showIp(View view) {
refreshIp();
}
private void refreshIp() {
LogUtil.debug("showIp");
String ipEthernetString = FunctionUtil.getIpAddress(MainActivity.this, false);
LogUtil.debug("ipEthernetString = " + ipEthernetString);
tv_ip_eth0.setText("有线网 IP:" + ipEthernetString);
String ipWifiString = FunctionUtil.getIpAddress(MainActivity.this, true);
tv_ip_wifi.setText("Wifi IP : " + ipWifiString);
LogUtil.debug("ipWifiString = " + ipWifiString);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
选择有线网或者Wifi 进行网络请求 (116个子文件)
gradlew.bat 2KB
executionHistory.bin 887KB
jarAnalysis.bin 205KB
classAnalysis.bin 122KB
fileHashes.bin 43KB
taskHistory.bin 29KB
outputFiles.bin 22KB
resourceHashesCache.bin 18KB
last-build.bin 1B
.gitignore 240B
.gitignore 50B
.gitignore 6B
build.gradle 1KB
build.gradle 553B
settings.gradle 54B
gradlew 5KB
selectNetworkDemo.app.iml 9KB
selectNetworkDemo.iml 1KB
gradle-wrapper.jar 53KB
MainActivity.java 8KB
FunctionUtil.java 5KB
TimeUtils.java 4KB
LogUtil.java 3KB
buildOutputCleanup.lock 17B
javaCompile.lock 17B
executionHistory.lock 17B
fileContent.lock 17B
fileHashes.lock 17B
checksums.lock 17B
ic_launcher_round.png 16KB
ic_launcher_round.png 12KB
ic_launcher.png 10KB
ic_launcher.png 8KB
ic_launcher_round.png 7KB
ic_launcher_round.png 5KB
ic_launcher.png 5KB
ic_launcher.png 4KB
ic_launcher_round.png 3KB
ic_launcher.png 3KB
proguard-rules.pro 770B
gradle.properties 1KB
local.properties 460B
gradle-wrapper.properties 236B
cache.properties 51B
gc.properties 0B
gc.properties 0B
build_file_checksums.ser 539B
MainActivity.java.txt 8KB
FunctionUtil.java.txt 5KB
TimeUtils.java.txt 4KB
LogUtil.java.txt 3KB
公司的java文件默认是加密的所以外部使用的时候把txt文件替换成java文件就可以使用.txt 0B
workspace.xml 7KB
ic_launcher_background.xml 6KB
activity_main.xml 3KB
ic_launcher_foreground.xml 2KB
Gradle__androidx_test_espresso_espresso_idling_resource_3_2_0_aar.xml 1KB
jarRepositories.xml 1KB
Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml 1KB
AndroidManifest.xml 1KB
Gradle__androidx_test_espresso_espresso_core_3_2_0_aar.xml 1KB
Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml 1KB
Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml 1023B
Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml 1023B
Gradle__com_google_android_material_material_1_1_0_aar.xml 1007B
Gradle__androidx_transition_transition_1_2_0_aar.xml 1005B
Gradle__androidx_test_ext_junit_1_1_1_aar.xml 999B
Gradle__androidx_appcompat_appcompat_1_1_0_aar.xml 996B
Gradle__androidx_fragment_fragment_1_1_0_aar.xml 987B
Gradle__androidx_test_core_1_2_0_aar.xml 979B
Gradle__androidx_test_monitor_1_2_0_aar.xml 976B
Gradle__androidx_test_runner_1_2_0_aar.xml 968B
Gradle__androidx_core_core_1_1_0_aar.xml 951B
gradle.xml 949B
Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml 906B
themes.xml 902B
Gradle__androidx_appcompat_appcompat_resources_1_1_0_aar.xml 899B
Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml 896B
Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml 892B
Gradle__androidx_lifecycle_lifecycle_viewmodel_2_1_0_aar.xml 872B
Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml 866B
Gradle__androidx_lifecycle_lifecycle_runtime_2_1_0_aar.xml 860B
themes.xml 854B
Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml 852B
Gradle__androidx_savedstate_savedstate_1_0_0_aar.xml 847B
Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml 844B
Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml 836B
Gradle__androidx_activity_activity_1_0_0_aar.xml 831B
Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml 830B
Gradle__androidx_customview_customview_1_0_0_aar.xml 820B
Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml 812B
Gradle__androidx_cardview_cardview_1_0_0_aar.xml 804B
Gradle__org_hamcrest_hamcrest_integration_1_3.xml 789B
Gradle__androidx_loader_loader_1_0_0_aar.xml 788B
Gradle__androidx_annotation_annotation_1_1_0.xml 761B
Gradle__org_hamcrest_hamcrest_library_1_3.xml 760B
Gradle__org_hamcrest_hamcrest_core_1_3.xml 740B
Gradle__com_squareup_javawriter_2_1_1.xml 733B
Gradle__javax_inject_javax_inject_1.xml 719B
Gradle__net_sf_kxml_kxml2_2_3_0.xml 694B
共 116 条
- 1
- 2
资源评论
峥嵘life
- 粉丝: 2533
- 资源: 114
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功