【问题标题】:How to open Wifi settings inside from a BroadcastReceiver如何从 BroadcastReceiver 打开 Wifi 设置
【发布时间】:2019-10-09 14:43:17
【问题描述】:

我正在开发一个可以识别设备是否连接到网络的 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();
        }
    }
}

}

【问题讨论】:

    标签: java android broadcastreceiver android-alertdialog settings


    【解决方案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();
        }
    }
    
    @Override
    public 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;
            }
        }
    }
    

    }

    【讨论】:

    • 非常感谢。这完美无缺。我想再问一个问题。如何添加一个广播接收器,例如 gps 的第一个接收器。我必须创建一个新的,还是可以使用现有的?
    • 很高兴为您提供帮助。我建议您创建另一个 BroadcastReceiver 来收听 Intent Action PROVIDERS_CHANGED_ACTION。这将在配置的位置提供程序更改时广播
    • 再次感谢。你对我很有帮助。
    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2021-01-08
    • 2017-02-08
    • 2015-08-08
    相关资源
    最近更新 更多