Android添加Alertdialog弹窗(输入密码进入)、创建系统变量

任务

        插入usb的时候需输入密码才能连接PC,并且可以重置密码

思考

        需要创建一个Dialog弹窗进行验证。然后创建一个系统变量存储密码,为了防止忘记密码设置一个开发者密码(不可重置)。

过程

        ① 在 android\frameworks\base\core\java\android\provider\Settings.java 文件下创建系统变量,在System类中填写所需的系统变量

        ② 寻找目标代码文件,以任务为例,在此文件下是显示usb连接的界面

        

       ③  在上述文件中(UsbDetailsFragment.class)添加创建的系统变量

         

        因为添加的新变量是在下图路径的方法里,所以在此java文件中使用该变量,需要导入变量

      

        ④ 在此类中定义变量

       

        ⑤ 定义usb连接密码验证方法、修改密码前验证密码方法、重置密码方法

//usb连接密码验证方法
public void UsbConnectionCheck(){
        final EditText editText = new EditText(mContext);
        //明文输入
        editText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
        //密文输入
//        editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
        AlertDialog.Builder inputDialog = new AlertDialog.Builder(mContext).setCancelable(false);
        inputDialog.setTitle("Please enter password").setView(editText);
        inputDialog.setPositiveButton("True",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        showToastShort(editText.getText().toString());
                        if(editText.getText().toString().equals(usb_password) || editText.getText().toString().equals("aaa123")){
                            dialog.dismiss();
                        }else{
							finish();
                        }
                    }
                }).setNeutralButton("Reset",new DialogInterface.OnClickListener(){
                    @Override
            public void onClick(DialogInterface dialog, int which) {
                        checkPwd();
                    }
        }).show();
    }
	
	
//重置密码方法
private void resetPassword(){
        final EditText editText = new EditText(mContext);
        AlertDialog.Builder inputDialog = new AlertDialog.Builder(mContext).setCancelable(false);
        inputDialog.setTitle("Please enter new password");
        inputDialog.setView(editText);

        inputDialog.setPositiveButton("Reset",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
						if(editText.getText().toString().equals("")){
							 showToastShort(editText.getText().toString());
							 resetPassword();
						}else{
                        Settings.System.putString(mContext.getContentResolver(),USB_PASSWORD,editText.getText().toString());
						finish();
                        }
					}
                }).show();

    }
	
	
//修改密码前验证密码方法
private void checkPwd(){
        final EditText editText = new EditText(mContext);
        AlertDialog.Builder inputDialog = new AlertDialog.Builder(mContext).setCancelable(false);
        inputDialog.setTitle("Please enter original password");
        inputDialog.setView(editText);
        inputDialog.setPositiveButton("True",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        showToastShort(editText.getText().toString());
                        if(editText.getText().toString().equals(usb_password) || editText.getText().toString().equals("aaa123")){
							resetPassword();
                        }else{
                            dialog.dismiss();
                        }
                    }
                }).setNeutralButton("back",new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which) {
                UsbConnectionCheck();
            }
        }).show();

    }
	

//提示框默认显示
private void showToastShort(String str){
        if(str.equals(usb_password) || str.equals("aaa123")){
            Toast.makeText(mContext, "Correct password", Toast.LENGTH_SHORT).show();
        }else if (str.equals("")){
            Toast.makeText(mContext, "Password cannot be empty", Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(mContext, "Password error", Toast.LENGTH_SHORT).show();
        }
    }

        

        ⑥ 在onViewCreated()方法下初始化密码值,并且调用 UsbConnectionCheck() 方法

//此方法一打开界面就会运行
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
	super.onViewCreated(view, savedInstanceState);
	Utils.setActionBarShadowAnimation(getActivity(), getSettingsLifecycle(), getListView());
	usb_password = Settings.System.getString(mContext.getContentResolver(),USB_PASSWORD);
    //设置初始化密码
	if(usb_password==null){
		Settings.System.putString(mContext.getContentResolver(),USB_PASSWORD,"123456");
		usb_password = "123456";
	}
	UsbConnectionCheck();
}

        ⑦导入所需的包

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentResolver;
import android.content.DialogInterface;
import android.os.Bundle;
import android.provider.Settings;
//密文输入
import android.text.method.PasswordTransformationMethod;
//明文输入
import android.text.InputType;

import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

运行效果

注意:

  1. 编写Alertdialog需要设置外部不可点击(setCancelable(false)),不然dialog就无效。
  2. 结束dialog需要使用 finish() 方法
  3. 重置密码为空时的判断
  4. 增加了系统变量需要使用 make update-api 命令进行编译
  5. Settings.System.getString(mContext.getContentResolver(),USB_PASSWORD);此方法为取创建变量的值
  6. Settings.System.putString(mContext.getContentResolver(),USB_PASSWORD,editText.getText().toString()); 此方法为修改创建变量的值

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android 弹窗可以使用 Dialog 或 PopupWindow 实现。 1. 使用 Dialog 实现弹窗: ```java AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("标题") .setMessage("内容") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // 点击确定按钮的逻辑 } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // 点击取消按钮的逻辑 } }); AlertDialog dialog = builder.create(); dialog.show(); ``` 2. 使用 PopupWindow 实现弹窗: ```java // 弹出布局 View layout = LayoutInflater.from(context).inflate(R.layout.popup_layout, null); // 实例化PopupWindow PopupWindow popupWindow = new PopupWindow(layout, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); // 设置PopupWindow的背景 popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // 设置PopupWindow的动画 popupWindow.setAnimationStyle(R.style.PopupAnimation); // 设置PopupWindow的位置 popupWindow.showAtLocation(anchorView, Gravity.CENTER, 0, 0); ``` 其中,R.layout.popup_layout 是自定义的弹窗布局,R.style.PopupAnimation 是自定义的弹窗动画样式。anchorView 是弹窗依附的 View。弹窗显示后,可以通过 layout.findViewById() 方法获取弹窗布局中的控件,并设置相应的事件处理逻辑。 ### 回答2: Android弹窗是指在Android应用程序中弹出的一个窗口,通常用于显示一些提示、警告或者请求用户输入的信息。 Android提供了多种弹窗类型,常见的有Toast和AlertDialog。 Toast是一种简单的短暂提示信息,通常以固定的位置和一定的时间显示在屏幕上,不会干扰用户的操作。开发者可以通过Toast类来创建并显示Toast弹窗,可以设置显示的文本内容、持续时间、位置等。 AlertDialog是一个更为复杂的弹窗,通常用于显示一些需要用户进行选择或者确认的信息。AlertDialog由对话框和按钮组成,开发者可以自定义对话框内容、按钮文字和点击事件等。AlertDialog可以使用AlertDialog.Builder类来创建,通过设置builder的各种属性和监听器来定制对话框,并调用builder的show()方法显示对话框。 除了Toast和AlertDialog之外,开发者还可以通过自定义布局文件来创建更复杂的弹窗,例如PopupWindow。PopupWindow可以显示在指定的位置和大小,并且可以自由定制弹窗的内容和样式。 Android弹窗在用户交互和提示上起到了重要的作用,开发者可以根据自己的需求选择合适的弹窗类型来优化用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值