手机安全卫士------手机防盗页面之自定义对话框&MD5加密

功能需求:

  • 用户点击主页面上的“手机防盗”按钮时,判断用户是否设置过密码。
  • 如果没有设置过,则弹出输入密码对话框
  • 如果设置过了,则弹出设置密码对话框
  • 用户的密码要进行MD5加密之后再存储在内存中

技术点:

- 自定义对话框的使用

- MD5加密的实现方式

- SharedPreferences的读写操作

自定义对话框

1.在layout目录下创建一个布局文件,把自定义的对话框布局设置成功

具体代码实现如下

设置密码对话框的布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_dialogsetuppwd_title"
        android:text="设置密码"
        android:textSize="36sp"
        android:textColor="#000"
        android:background="#66ff6600"
        android:gravity="center_horizontal"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入密码"
        android:inputType="textPassword"
        android:id="@+id/et_dialogsetuppwd_pwd"
        android:textSize="30sp"
        android:textColor="#000"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入确认密码"
        android:inputType="textPassword"
        android:id="@+id/et_dialogsetuppwd_checkpwd"
        android:textSize="30sp"
        android:textColor="#000"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/btn_dialogsetuppwd_ok"
            android:text="确定"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="20dp"
            android:textSize="28sp"
            />
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/btn_dialogsetuppwd_cancel"
            android:textSize="28sp"
            android:text="取消"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="10dp"
            />
    </LinearLayout>
</LinearLayout>

还有输入密码对话框的布局文件,不再赘述。。

2.加载自定义布局到对话框的操作:

AlertDialog.Builder builder = new AlertDialog.Builder(HomeActivity.this);
        View view = View.inflate(HomeActivity.this,R.layout.dialog_input_password,null);
        builder.setView(view);
        mEtPwd = (EditText) view.findViewById(R.id.et_dialoginputpwd_pwd);
        mBtnOk = (Button) view.findViewById(R.id.btn_dialoginputpwd_ok);
        mBtnCancel = (Button) view.findViewById(R.id.btn_dialoginputpwd_cancel);
        mBtnOk.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v)
            {
                String password = mEtPwd.getText().toString().trim();
                if(TextUtils.isEmpty(password))
                {
                    Toast.makeText(HomeActivity.this,"密码不能为空,请重新输入",Toast.LENGTH_SHORT).show();
                }
                else
                {
                    String checkPassword = sp.getString("password",null);
                    if(password.equals(checkPassword))
                    {
                        //进入主页面
                        dialog.dismiss();
                    }
                    else
                    {
                        Toast.makeText(HomeActivity.this,"密码错误,请重新输入",Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
        mBtnCancel.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
        dialog = builder.show();
    }

逻辑:

  • 判断password的值是否为空,如果为空,则 弹出设置密码对话框;否则,弹出输入密码对话框。
  • 如果弹出的是设置密码对话框,当两次输入的密码相同且不为空的时候,存储密码到SharedPreferences.
  • 如果弹出的是输入密码对话框,当用户输入的密码和SharedPreferences中存储的密码相同时,跳转到下一个页面,否则,吐司报错

MD5加密

MD5加密是不可逆的,即加密后的密文无法转换回原来的内容

MD5加密实现的思路:

  • 获得一个信息摘要器MessageDigest
  • 把信息摘要器实例化,并确定采用MD5的加密方式
  • 把字符串转换成字节数组
  • 把字节数组通过digest()方法转换成MD5加密后的字节数组
  • 把数组遍历
  • 对字节数组中的每一个字节进行与运算(加盐),返回int类型
  • 调用Integer.toHexString(int) 把int类型转换成十六进制字符串
  • 如果字符串的长度为1,则进行补零操作
  • 添加字符串到StringBuffer中
  • StringBuffer调用toString()转换成字符串,即为结果。

代码示例:

//把数据进行MD5加密
    public String getTextByMD5(String text)
    {
        StringBuffer buffer = new StringBuffer();
        try
        {
            //1.创建一个信息摘要器
            MessageDigest digest = MessageDigest.getInstance("md5");
            //2.调用digest方法,把数据进行MD5第一次加密
            byte[] bytes = digest.digest(text.getBytes());
            //3.遍历数组
            for(byte b : bytes)
            {
                //4.进行与运算
                int number = b & 0xff;
                //5.把运算结果转换成十六进制字符串
                String hex = Integer.toHexString(number);
                //6.添加字符串到buffer
                if(hex.length() == 1)
                {
                    buffer.append("0");
                }
                buffer.append(hex);
            }
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        return buffer.toString();
    }

不知不觉天亮了~~睡意袭来,五个小时之后继续战斗!!

版权声明:刚出锅的原创内容,希望对你有帮助~

时间: 2024-10-13 03:05:19

手机安全卫士------手机防盗页面之自定义对话框&MD5加密的相关文章

手机安全卫士------手机防盗页面之完成向导页面的UI布局和动画

实现逻辑: 用户点击对话框的确定按钮,跳转页面的时候判断用户此前是否设置过手机防盗功能 如果设置过,直接跳转到防盗页面 如果没设置过,进入设置向导页面,进行相应的配置. 设置向导页面的效果图: 功能的技术点: 1.自定义文字风格 2.自定义按钮的背景 3.界面切换的动画 4.滑动屏幕切换页面 自定义文字风格 由于布局中有很多文字的颜色.字号.上边距.左边距等属性是相同的,因此,自定义一个文字风格,降低编码工作量 具体代码如下: <style name="LostFindText"

手机安全卫士------手机防盗页面之发送短信&amp;接收短信

功能需求: 接上一篇文章,如果sim卡变更,则发送一条报警短信给安全号码 接收从安全号码发来的短信,如果内容为报警指令,则根据相应的报警指令做出相应的操作 发送短信 1.创建一个SmsManager对象 SmsManager manager = SmsManager.getDefault(); 2.通过SharedPreferences获取安全号码 String number 3.创建短信内容: content 4.分割短信: 由于每条短信只能70个字,所以我们要把它分割一下:manager.d

手机安全卫士------手机防盗页面之播放报警音乐&amp;GPS定位

播放报警音乐 1.把音乐文件放在res/raw文件中 2.创建MediaPlayer对象 MediaPlayer player = MediaPlayer.create(Context,R.raw.*); 3.设置声音为最高: player.setVolume(1.0f,1.0f); 4.设置声音为循环播放: player.setLooping(true); 代码: //报警音乐 MediaPlayer mediaPlayer = MediaPlayer.create(context, R.ra

手机安全卫士------手机防盗页面之销毁数据&amp;远程锁屏

销毁数据和远程锁屏的功能都要通过获得设备管理员权限才能实现 1.首先创建一个类,继承 DeviceAdminReceiver.看类名就会猜到,它可能是一个BroadCastReceiver.通过查看源代码确定这是一个广播子类.所以要到清单文件上注册. 查看Android官方API: <receiver android:name=".MyAdmin" android:label="@string/description" android:description=

Android实例-手机安全卫士(二十三)-自定义抽象类及使用

一.目标. 将二十二节中通过滑动切换Activity界面效果的代码提取出来做成一个自定义抽象类,并定义抽象方法,便于其他类的调用.也就是其他Activity(如设置向导2.3.4)通过继承自定义的类,再通过实现其未实现的方法来快速实现滑动切换. 二.代码实现. 1.在程序包下新建一个类(取名SlideActivity),继承Activity,指定其类型为抽象类(public abstract class SlideActivity extends Activity).在自定义的抽象类代码中,定义

手机安全卫士------手机防盗页面之sim卡绑定&amp;读取联系人

实现的功能: sim卡的绑定 读取联系人 技术点: sim卡绑定 获取开机广播 读取联系人 SimpleAdapter的使用 Activity间数据传递 sim卡绑定 思路: 创建一个TelephonyManager对象 TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 调用getSimSerialNumber()即可得到sim卡的序列号 Strin

Android实例-手机安全卫士(四十)-自定义吐司(二)(布局样式、背景)

一. 自定义Toast的布局.背景等 二.代码实现 1.在res文件夹下的layout文件夹中新建布局文件(Android xml file,取名phone_add_toast),用于定义要显示的Toast的布局方式: 2.根据设计要求自定义的Toast布局为左右的水平线性布局,宽高均为包裹内容,左边为图片,右边为归属地信息文本(由于归属地信息会根据号码不同而改变,因此可为其设置id(tv_phone_add_toast)): (1)图片采用<ImageView>组件,通过android:sr

Android实例-手机安全卫士(二十一)-自定义Activity界面切换动画

一.目标. 实现两个Activity界面的动画切换效果. 二.代码实现. 1.在res文件夹下新建一个名为anim的文件夹. 2.在新建的anim文件夹中新建一个Android xml file文件(取名tran_out),根据动画要求选择根元素(本例为translate),用于实现Activity界面移出屏幕的动画效果. 3.在新建的xml文件中,根标签<translate>的属性中,当输入一个属性时会自动增加命名空间.属性android:fromXDelta表示从哪个X轴来,原点为屏幕左上

手机安全卫士06-手机防盗之自定义对话框

修改主界面的titleBar 可以在系统的AndroidManifest.xml文件中修改相应的配置来改变主界面的theme(设置为无titleBar样式) 当前主界面的样式为: <activity android:name="com.liuhao.mobilesafe.ui.MainActivity" android:theme="@android:style/Theme.NoTitleBar" android:label="@string/mai