在Android API 29中,可以使用ConnectivityManager类来检查设备是否连接到蜂窝网络。下面是一个包含代码示例的解决方法:
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.os.Build;
import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查是否连接到蜂窝网络
boolean isConnectedToCellular = isCellularNetworkConnected(this);
String message = isConnectedToCellular ? "已连接到蜂窝网络" : "未连接到蜂窝网络";
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
private boolean isCellularNetworkConnected(Context context) {
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
// 检查设备的API级别
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
Network network = connectivityManager.getActiveNetwork();
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
return capabilities != null &&
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR);
} else {
// 在API级别低于Android Q时执行的操作
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return networkInfo != null &&
networkInfo.getType() == ConnectivityManager.TYPE_MOBILE;
}
}
}
在上述代码中,我们使用了ConnectivityManager类的getActiveNetwork()
和getNetworkCapabilities()
方法来检查设备是否连接到蜂窝网络。如果设备的API级别低于Android Q(29),我们使用旧的getActiveNetworkInfo()
方法来进行检查。
请注意,在使用这些方法之前,您需要在AndroidManifest.xml文件中添加以下权限:
这样才能在应用中访问网络连接状态的信息。