gpt4 book ai didi

java - 警报对话框在广播接收器类中无法正常工作

转载 作者:行者123 更新时间:2023-12-02 09:08:37 24 4
gpt4 key购买 nike

首先,我正在创建一个 Android 应用程序,其主要要求是网络连接。我的应用程序始终需要网络连接。因此,我创建了一个广播 接收器类来检查连接的可用性。如果连接不可用,那么我将显示一个对话框,强制用户连接到网络,否则退出应用程序,并且 对话框 不可取消 。所以问题是,我发现如果我运行我的应用程序(连接网络),它就会按预期正常工作,如果断开网络,对话框就会出现,如果我再次连接网络,对话框就会消失,但是当我启动我的应用程序时(如果没有连接网络),那么即使我连接网络,该对话框也不会消失。下面是我的 ConnectionStatusReceiver另外请告诉我这是正确的方法吗?我怎样才能改变整个内容 View ,就像亚马逊应用程序在连接不可用时显示狗的图像??基本上我希望我的应用程序限制用户在 notwork 不可用时执行任何操作。

    import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.os.Build;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Toast;

public class ConnectionStatusReceiver extends BroadcastReceiver {

private AlertDialog.Builder alertadd;
private AlertDialog dialog;
private boolean isDialogOpen = false;
private SharedPreferences sp;
private SharedPreferences.Editor editor;

ConnectionStatusReceiver(){
}


public boolean isOnline(Context context) {

final ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

if (cm != null) {
if (Build.VERSION.SDK_INT < 23) {
final NetworkInfo ni = cm.getActiveNetworkInfo();

if (ni != null) {
return (ni.isConnected() && (ni.getType() == ConnectivityManager.TYPE_WIFI || ni.getType() == ConnectivityManager.TYPE_MOBILE));
}
} else {
final Network n = cm.getActiveNetwork();

if (n != null) {
final NetworkCapabilities nc = cm.getNetworkCapabilities(n);

return (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI));
}
}
}

return false;
}

@Override
public void onReceive(final Context context, Intent intent) {

if(isOnline(context)){

if (isDialogOpen) {
dialog.dismiss();
}
isDialogOpen = false;
MyToast.showToast(context, "Connection Available", Toast.LENGTH_LONG);

}else{

alertadd = new AlertDialog.Builder(context);
LayoutInflater factory = LayoutInflater.from(context);
final View view = factory.inflate(R.layout.no_connection_error_dialog, null);
alertadd.setView(view);

alertadd.setNegativeButton("EXIT", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
System.exit(0);
}
});
alertadd.setCancelable(false);
dialog = alertadd.create();
dialog.show();
isDialogOpen = true;
MyToast.showToast(context, "Connection Lost!\nPlease connect to a Network", Toast.LENGTH_LONG);
}

}
}

最佳答案

如果没有 Activity 上下文,则无法使用 AlertDialog。但如果您确实想在没有 Activity 上下文的情况下显示对话框,请使用以下代码:

public void showDialog(Context context) {
Dialog dialog = new Dialog(context);
dialog.setTitle("Title");
dialog.getWindow().setType(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY : WindowManager.LayoutParams.TYPE_PHONE);
dialog.show();
}

并向AndroidManifyingst.xml添加以下权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

关于java - 警报对话框在广播接收器类中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59589819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com