我是 android 的新手,正在处理一个广播互联网连接状态的应用程序。我使用了一种已弃用的方法 isConnectingOrConnected() 。我无法修复我的代码及其困惑。请查看我的代码并帮助我。非常感谢任何帮助
这是我的连接接收器代码
import android.net.NetworkInfo;
public class ConnectivityReceiver extends BroadcastReceiver {
public static ConnectivityReceiverListener connectivityReceiverListener;
public ConnectivityReceiver(){
super();
}
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager manager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = manager.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
if (connectivityReceiverListener != null) {
connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
}
}
public static boolean isConnected() {
ConnectivityManager
manager = (ConnectivityManager)
ClassForListener.getInstance().getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = manager.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
public interface ConnectivityReceiverListener {
void onNetworkConnectionChanged(boolean isConnected);
}
}
这是我的 MainActivity
package com.appindia.srikavyanalluri.mybroacasts;
import android.graphics.Color;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity
implements ConnectivityReceiver.ConnectivityReceiverListener {
public Button button1;
CoordinatorLayout cl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button)findViewById(R.id.button_1_1);
checkConnection();
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkConnection();
}
});
}
private void checkConnection() {
boolean isConnected = ConnectivityReceiver.isConnected();
show(isConnected);
}
private void show(boolean isConnected) {
String message;
int color;
if (isConnected) {
message = "Internet is Connected! hurray";
color = Color.WHITE;
} else {
message = "Internet is gone :-(";
color = Color.WHITE;
}
Snackbar snackbar = Snackbar.make(cl, message, Snackbar.LENGTH_LONG);
View view = snackbar.getView();
TextView textView = (TextView)
view.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(color);
snackbar.show();
}
@Override
protected void onResume() {
super.onResume();
ClassForListener.getInstance().setConnectivityListener(this);
}
@Override
public void onNetworkConnectionChanged(boolean isConnected) {
show(isConnected);
}
}
最佳答案
isConnectedOrConnecting
方法在 API 级别 28 中被弃用。
应用应改为使用 ConnectivityManager.NetworkCallback
用于了解连接变化的 API。
试试
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder builder = new NetworkRequest.Builder();
connectivityManager.registerNetworkCallback(
builder.build(),
new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
// Active Network
}
@Override
public void onLost(Network network) {
// Lost Network
}
}
);
检查 this
回答。
ConnectivityManager.registerDefaultNetworkCallback(ConnectivityManager.NetworkCallback) and ConnectivityManager.registerNetworkCallback(NetworkRequest, PendingIntent). These will give a more accurate picture of the connectivity state of the device and let apps react more easily and quickly to changes.
关于java - 关于 isConnectingOrConnecting 的替代编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54002775/