如何从 BroadcastReceiver 内部打开 Wifi 设置

我正在开发一个 Android 应用程序,它可以识别设备是否连接到网络。如果没有,应用程序会显示AlertDialog并让用户有机会转到设备设置并打开 wifi。


我已经为这项工作创建了一个BroadcastReceiver,但我不知道如何创建一个AlertDialog并为用户提供启用 wifi 的选项。


这是 的代码BroadcastReceiver。


public class ExampleBroadcastReceiver extends BroadcastReceiver {


@Override

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

    if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {

        boolean noConnectivity = intent.getBooleanExtra(

                ConnectivityManager.EXTRA_NO_CONNECTIVITY, false

        );

        if (noConnectivity) {

            AlertDialog.Builder builder1 = new AlertDialog.Builder(context);

            builder1.setMessage("You must have internet connection");

            builder1.setCancelable(true);


            builder1.setPositiveButton(

                    "Yes",

                    new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int id) {


                        }

                    });


            builder1.setNegativeButton(

                    "No",

                    new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int id) {

                            dialog.cancel();

                        }

                    });

            builder1.create();

            builder1.show();


        } else {

            Toast.makeText(context, "Connected", Toast.LENGTH_SHORT).show();

        }

    }

}

}


慕勒3428872
浏览 69回答 1
1回答

温温酱

请注意,以下代码仅供您参考。您可以根据您的要求更新/更改此代码。public class MainActivity extends AppCompatActivity {    private static final String TAG = MainActivity.class.getSimpleName();    private BroadcastReceiver mNetworkReceiver;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        registerNetworkBroadcastForNougat();    }private void registerNetworkBroadcastForNougat() {    mNetworkReceiver = new NetworkChangeReceiver();    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {        registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));    }    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {        registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));    }}protected void unregisterNetworkChanges() {    try {        unregisterReceiver(mNetworkReceiver);    } catch (IllegalArgumentException e) {        e.printStackTrace();    }}@Overridepublic void onDestroy() {    super.onDestroy();    unregisterNetworkChanges();}class NetworkChangeReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent)    {        try        {            if (!isOnline(context)) {                showDialog(context);            }        } catch (NullPointerException e) {            e.printStackTrace();        }    }    private void showDialog(final Context context) {        AlertDialog.Builder builder1 = new AlertDialog.Builder(context);        builder1.setMessage("You must have internet connection");        builder1.setCancelable(true);        builder1.setPositiveButton(                "Yes",                new DialogInterface.OnClickListener() {                    public void onClick(DialogInterface dialog, int id) {                        startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));                    }                });        builder1.setNegativeButton(                "No",                new DialogInterface.OnClickListener() {                    public void onClick(DialogInterface dialog, int id) {                        dialog.cancel();                    }                });        builder1.create();        builder1.show();    }    private boolean isOnline(Context context) {        try {            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo netInfo = cm.getActiveNetworkInfo();            //should check null because in airplane mode it will be null            return (netInfo != null && netInfo.isConnected());        } catch (NullPointerException e) {            e.printStackTrace();            return false;        }    }}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java