我正在开发一个使用特定通信协议的应用。该协议与可以远程启用和禁用的电插头通信。为此,应用程序必须检查插头是否连接到用户的Wi-Fi网络。如果不是,我会在DialogFragment
中询问网络密码并将其发送到插头,以便将它们与网络配对。
我的问题如下:如果连接失败,用户不应该访问应用程序的其余部分。我不知道如何阻止这种访问。
我在AsyncTask
中启动了连接测试。在此doInBackground
方法中,如果自动连接失败,则会出现一个对话框,询问当前的Wi-Fi密码:
protected Void doInBackground(Void... params)
{
if (!m_smartConfig.tryAutoConnectionToWiFiNetwork(false))
showPasswordDialog();
return null;
}
提交后,应用会再次尝试连接。如果密码正确,一切都很好,应用程序可以显示其余内容。如果不是,我希望它不显示任何内容并继续显示DialogFragment
弹出窗口。我怎么能这样做?
编辑:这是我的自定义DialogFragment
:
public class NoticeDialogFragment extends DialogFragment
{ NoticeDialogListener mListener;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// Verify that the host activity implements the callback interface
try {
// Instantiate the NoticeDialogListener so we can send events to the host
mListener = (NoticeDialogListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString()
+ " must implement NoticeDialogListener");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final AlertDialog.Builder dialogBuilder;
LayoutInflater inflater = LayoutInflater.from(getActivity());
final View v = inflater.inflate(R.layout.password_dialog, null);
dialogBuilder = new AlertDialog.Builder(getActivity());
dialogBuilder.setMessage(R.string.password_hint)
.setView(v)
.setPositiveButton(R.string.submit, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Send the positive button event back to the host activity
EditText valueView = (EditText) v.findViewById(R.id.password);
if (valueView != null) {
try {
String password = valueView.getText().toString();
mListener.onDialogPositiveClick(NoticeDialogFragment.this, password);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
return (dialogBuilder.create());
}
public interface NoticeDialogListener {
public void onDialogPositiveClick(DialogFragment dialog, String password) throws Exception;
}
}
编辑2:为我的问题添加一些细节,问题是我无法立即知道密码是否正确。我必须尝试连接插头并等待他们的响应(成功或失败)。只有他们的回答才能选择正确的行为。