我使用ConnectivityManager.NetworkCallback
来获取android设备的已连接wifi网络SSID。我需要为Android 9.0及更高版本实现此应用程序。因此,我没有使用广播接收器(因为它们已不支持Android 9.0)。而不是我使用ConnectivityManager.NetworkCallback
。如下。
package com.example.myapplication;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkRequest;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;
public class MainActivity extends AppCompatActivity {
ConnectivityManager connectivityManager;
ConnectivityManager.NetworkCallback networkCallback;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest networkRequest = new NetworkRequest.Builder().build();
networkCallback = new ConnectivityManager.NetworkCallback(){
@Override
public void onAvailable(Network network) {
WifiManager wifiManager;
String connectedSsid = null;
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
connectedSsid = info.getSSID();
if (connectedSsid != null) {
Toast.makeText(getApplicationContext(), "*******" + connectedSsid + "**********", Toast.LENGTH_LONG).show();
}
}
@Override
public void onLost(Network network){
Toast.makeText(getApplicationContext(), "*******DIS!! connected**********", Toast.LENGTH_LONG).show();
}
};
connectivityManager.registerNetworkCallback(networkRequest,networkCallback);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onStop(){
super.onStop();
connectivityManager.unregisterNetworkCallback(networkCallback);
}
}
我已在AndroidManifest中添加了所需的权限,如下所示,
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
我在onCreate
方法中将其注册为
connectivityManager.registerNetworkCallback(networkRequest,networkCallback);
,并且在onStop
方法中未注册为
connectivityManager.unregisterNetworkCallback(networkCallback);
当我打开和关闭wifi连接时,此功能有效。但是,如果我将连接从一个网络更改为另一网络,则这些Toast无效。那我该怎么办?
答案 0 :(得分:0)
使用此代码,也许会对您有所帮助。
public boolean isConnectingToInternet() {
ConnectivityManager connectivity = (ConnectivityManager) MainActivity.this.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
return false;
}
添加在OnCreate()中编写此代码
if (!isConnectingToInternet()) {
LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
View view1 = inflater.inflate(R.layout.internet_error, null);
final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this)
.setView(view1).create();
Button cancel = view1.findViewById(R.id.btn_cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
}
});
Toast.makeText(this, "Not Connected To Internet..", Toast.LENGTH_SHORT).show();
alertDialog.show();
}