Home页面显示了一个九宫格的布局,利用GrieView进行一系列的初始化动作,在Home页面可以设置密码,因此在这个界面有显示密码和设置密码的功能。GrideView会有监听,根据点击的条目弹到不同的显示界面。在第一次登陆的时候,会将设置的密码弄成md5加密。
md5加密密码
package com.ldw.safe.utils;
import java.io.File;
import java.io.FileInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
/**
* md5加密,md5永远是32位
*
* @param password
* @return
*/
public static String encode(String password) {
try {
MessageDigest instance = MessageDigest.getInstance("MD5");//获取MD5算法对象
byte[] digest = instance.digest(password.getBytes());//对字符串加密,返回字符数组
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
int i = b & 0xff;//取字节的低8位有效值
String hexString = Integer.toHexString(i);//将整数转为16进制
if (hexString.length() < 2) {
hexString = "0" + hexString;//如果只有1位就补零
}
sb.append(hexString);
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
//没有该算法的时候,抛出异常
}
return "";
}
/*
* 获取到文件的MD5值,文件的特征码
*/
public static String getFileMd5(String sourceDir) {
try {
//创建一个流来读取文件
File file = new File(sourceDir);
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len = -1;
MessageDigest messageDigest = MessageDigest.getInstance("md5");
while((len = fis.read(buffer)) != -1){
//获取到数字摘要
messageDigest.update(buffer, 0, len);
}
byte[] result = messageDigest.digest();
StringBuffer sb = new StringBuffer();
for (byte b : result) {
int i = b & 0xff;//取字节的低8位有效值
String hexString = Integer.toHexString(i);//将整数转为16进制
if (hexString.length() < 2) {
hexString = "0" + hexString;//如果只有1位就补零
}
sb.append(hexString);
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
密码页的布局,密码页的布局是一个自定义的布局,来显示布局内容
<?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:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/black"
android:textSize="20sp"
android:background="#66ff00"
android:text="输入密码"
android:padding="10dp"
/>
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:hint="请输入密码"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<Button
android:id="@+id/btn_ok"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="确定" />
<Button
android:id="@+id/btn_cancle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="取消" />
</LinearLayout>
</LinearLayout>
逻辑代码,显示一个弹窗,会根据需要来设置不同的显示
/*
* 显示密码的弹窗
*/
protected void showPasswordDialog(){
//判断是否设置密码
String savePassword = mPref.getString("password", null);
if(!TextUtils.isEmpty(savePassword)){
//输入密码的弹窗
showPasswordInputDialog();
}else{
//如果没有设置过,弹出密码设置的弹窗
showPasswordSetDialog();
}
}
/*
* 输入密码框,设置过密码只需要登陆
*/
protected void showPasswordInputDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final AlertDialog dialog = builder.create();
View view = View.inflate(this, R.layout.dialog_input_password, null);
//dialog.setView(view);//自定义的view设置到dialog
dialog.setView(view, 0, 0, 0, 0);//设置边距为0,兼容android2.3
final EditText etPassword = (EditText) view.findViewById(R.id.et_password);
//获取2个按键
Button btnOk = (Button)view.findViewById(R.id.btn_ok);
Button btnCancle = (Button)view.findViewById(R.id.btn_cancle);
//监听ok按键
btnOk.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
String password = etPassword.getText().toString();
if(!TextUtils.isEmpty(password)){
String savePassword = mPref.getString("password", null);
if(MD5Utils.encode(password).equals(savePassword)){
Toast.makeText(HomeActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
//对话框消失
dialog.dismiss();
//跳转到手机防盗界面
startActivity(new Intent(HomeActivity.this, LostAndFind.class));
}else{
Toast.makeText(HomeActivity.this, "登陆失败", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(HomeActivity.this, "输入框不能是空的", Toast.LENGTH_SHORT).show();
}
}
});
//监听取消按键
btnCancle.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
/*
* 设置密码的弹窗,以前没有设置密码
*/
protected void showPasswordSetDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final AlertDialog dialog = builder.create();
View view = View.inflate(this, R.layout.dialog_set_password, null);
//dialog.setView(view);//自定义的view设置到dialog
dialog.setView(view, 0, 0, 0, 0);//设置边距为0,兼容android2.3
final EditText etPassword = (EditText) view.findViewById(R.id.et_password);
final EditText etPasswordConfirm = (EditText) view.findViewById(R.id.et_password_confirm);
//获取2个按键
Button btnOk = (Button)view.findViewById(R.id.btn_ok);
Button btnCancle = (Button)view.findViewById(R.id.btn_cancle);
//监听ok按键
btnOk.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
String password = etPassword.getText().toString();
String passwordConfirm = etPasswordConfirm.getText().toString();
//TextUtils.isEmpty(password)判断password是不是空,可以避免都是空格
if(!TextUtils.isEmpty(password) && !passwordConfirm.isEmpty()){
if(password.equals(passwordConfirm)){
Toast.makeText(HomeActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
//保存密码到mPref
mPref.edit().putString("password", MD5Utils.encode(password)).commit();
//对话框消失
dialog.dismiss();
//跳转到手机防盗界面
startActivity(new Intent(HomeActivity.this, LostAndFind.class));
}else{
Toast.makeText(HomeActivity.this, "两次密码不一致", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(HomeActivity.this, "输入框不能是空的", Toast.LENGTH_SHORT).show();
}
}
});
//监听取消按键
btnCancle.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
完整代码。
package com.ldw.safe.Activity;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.ldw.safe.R;
import com.ldw.safe.utils.MD5Utils;
public class HomeActivity extends Activity{
private GridView gv_home;
private String[] mItems = new String[] {"手机防盗", "通讯卫士", "软件管理", "进程管理", "流量统计", "手机杀毒", "缓存清理", "高级工具", "设置中心"};
private int[] mPics = new int[] {R.drawable.safe, R.drawable.callmsgsafe, R.drawable.app,
R.drawable.taskmanager, R.drawable.netmanager, R.drawable.sysoptimize,
R.drawable.trojan, R.drawable.atools, R.drawable.settings};
private SharedPreferences mPref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mPref = getSharedPreferences("config", MODE_PRIVATE);
gv_home = (GridView) findViewById(R.id.gv_home);
gv_home.setAdapter(new HomeAdapter());
//监听gridview点击事件
gv_home.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch(position){
case 0:
//手机防盗
showPasswordDialog();
break;
case 1:
//通讯卫士
startActivity(new Intent(HomeActivity.this, CallSafeActivity.class));
break;
case 2:
//软件管理
startActivity(new Intent(HomeActivity.this, AppManagerActivity.class));
break;
case 3:
//进程管理
startActivity(new Intent(HomeActivity.this, TaskManagerActivity.class));
break;
case 5:
//手机杀毒
startActivity(new Intent(HomeActivity.this, AntivirusActivity.class));
break;
case 7:
//高级工具
startActivity(new Intent(HomeActivity.this, AdvancedToolsActivity.class));
break;
case 8:
//设置中心
startActivity(new Intent(HomeActivity.this, SettingActivity.class));
break;
default:
break;
}
}
});
}
/*
* 显示密码的弹窗
*/
protected void showPasswordDialog(){
//判断是否设置密码
String savePassword = mPref.getString("password", null);
if(!TextUtils.isEmpty(savePassword)){
//输入密码的弹窗
showPasswordInputDialog();
}else{
//如果没有设置过,弹出密码设置的弹窗
showPasswordSetDialog();
}
}
/*
* 输入密码框,设置过密码只需要登陆
*/
protected void showPasswordInputDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final AlertDialog dialog = builder.create();
View view = View.inflate(this, R.layout.dialog_input_password, null);
//dialog.setView(view);//自定义的view设置到dialog
dialog.setView(view, 0, 0, 0, 0);//设置边距为0,兼容android2.3
final EditText etPassword = (EditText) view.findViewById(R.id.et_password);
//获取2个按键
Button btnOk = (Button)view.findViewById(R.id.btn_ok);
Button btnCancle = (Button)view.findViewById(R.id.btn_cancle);
//监听ok按键
btnOk.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
String password = etPassword.getText().toString();
if(!TextUtils.isEmpty(password)){
String savePassword = mPref.getString("password", null);
if(MD5Utils.encode(password).equals(savePassword)){
Toast.makeText(HomeActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
//对话框消失
dialog.dismiss();
//跳转到手机防盗界面
startActivity(new Intent(HomeActivity.this, LostAndFind.class));
}else{
Toast.makeText(HomeActivity.this, "登陆失败", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(HomeActivity.this, "输入框不能是空的", Toast.LENGTH_SHORT).show();
}
}
});
//监听取消按键
btnCancle.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
/*
* 设置密码的弹窗,以前没有设置密码
*/
protected void showPasswordSetDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final AlertDialog dialog = builder.create();
View view = View.inflate(this, R.layout.dialog_set_password, null);
//dialog.setView(view);//自定义的view设置到dialog
dialog.setView(view, 0, 0, 0, 0);//设置边距为0,兼容android2.3
final EditText etPassword = (EditText) view.findViewById(R.id.et_password);
final EditText etPasswordConfirm = (EditText) view.findViewById(R.id.et_password_confirm);
//获取2个按键
Button btnOk = (Button)view.findViewById(R.id.btn_ok);
Button btnCancle = (Button)view.findViewById(R.id.btn_cancle);
//监听ok按键
btnOk.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
String password = etPassword.getText().toString();
String passwordConfirm = etPasswordConfirm.getText().toString();
//TextUtils.isEmpty(password)判断password是不是空,可以避免都是空格
if(!TextUtils.isEmpty(password) && !passwordConfirm.isEmpty()){
if(password.equals(passwordConfirm)){
Toast.makeText(HomeActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
//保存密码到mPref
mPref.edit().putString("password", MD5Utils.encode(password)).commit();
//对话框消失
dialog.dismiss();
//跳转到手机防盗界面
startActivity(new Intent(HomeActivity.this, LostAndFind.class));
}else{
Toast.makeText(HomeActivity.this, "两次密码不一致", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(HomeActivity.this, "输入框不能是空的", Toast.LENGTH_SHORT).show();
}
}
});
//监听取消按键
btnCancle.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
class HomeAdapter extends BaseAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return mItems.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mItems[position];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(HomeActivity.this, R.layout.home_list_item, null);
ImageView iv_item = (ImageView) view.findViewById(R.id.iv_item);
TextView tv_item = (TextView) view.findViewById(R.id.tv_item);
iv_item.setImageResource(mPics[position]);
tv_item.setText(mItems[position]);
return view;
}
}
}