检测sim卡是否绑定&获取电话管理者&MD5加密&登录处理判断逻辑&手势识别滑动处理&简单动画处理

获取到电话管理者

private TelephonyManager mTm;
mTm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
获取到sim卡
String sim = SharedPreferencesUtils.getSting(SetUpActivity2.this, ConstansUtils.SJFD_SIM, "");

			// 判断当前的sim卡是否缓存到sp里面。如果没有缓存。说明没有绑定
			if (TextUtils.isEmpty(sim)) {
				// 没有绑定 需要绑定
				iv_state.setImageResource(R.drawable.lock);
				// bindUnbindSim.setr
				// 获取到sim卡串号 唯一
				simSerialNumber = mTm.getSimSerialNumber();
				// 绑定保存数据
				SharedPreferencesUtils.saveString(SetUpActivity2.this, ConstansUtils.SJFD_SIM, simSerialNumber);

			} else {
				// 已经绑定。需要解绑
				iv_state.setImageResource(R.drawable.unlock);
				// 解绑保存数据
				SharedPreferencesUtils.saveString(SetUpActivity2.this, ConstansUtils.SJFD_SIM, "");
			}
回显数据
String result = SharedPreferencesUtils.getSting(this, ConstansUtils.SJFD_SIM, "");
		// 判断sim卡是否为null
		if (TextUtils.isEmpty(result)) {
			iv_state.setImageResource(R.drawable.unlock);
		} else {
			iv_state.setImageResource(R.drawable.lock);
		}
展示安全的土司

public class ToastUtils {
    /**
     * 展示安全的土司
     * @param activity
     * @param msg 描述信息
     */
	public static void safeToast(final Activity activity,final String msg){
		//Thread.currentThread().getName()获取到线程的名字
		if(Thread.currentThread().getName().equals("main")){
			Toast.makeText(activity, msg, 0).show();
		}else{
			activity.runOnUiThread(new Runnable() {
				
				@Override
				public void run() {
					Toast.makeText(activity, msg, 0).show();
					
				}
			});
		}
		
	}
}
MD5加密

public class Md5Utils {
    /**
     * 对明文进行加密
     * @param input
     * @return
     */
    public static String getMd5(String input) {
        String md5 = "";
        // 获取字节数组
        byte[] data = input.getBytes();
        // 获取j2se MessageDigest 帮助开发者进行摘要
        try {
            MessageDigest dm = MessageDigest.getInstance("MD5");
            byte[] result = dm.digest(data);// 16

            StringBuffer sb = new StringBuffer();
            for (byte item : result) {
                String hex = Integer.toHexString(item & 0xFF);
                if (hex.length() == 1) {
                    sb.append('0').append(hex);
                } else {
                    sb.append(hex);
                }
            }
            // 特征值 转成32 md5
            md5 = sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return md5;
    }
    
    /**
     * 获取md5从文件
     * @param filePath
     * @return
     * @throws NoSuchAlgorithmException
     * @throws FileNotFoundException
     * @throws IOException
     */
    public  static String getMd5FromFile(String filePath) throws Exception {
        // 针对每部分的byte[]
        MessageDigest md = MessageDigest.getInstance("MD5");
        FileInputStream input = new FileInputStream(new File(filePath));
        byte[] buffer = new byte[1024 * 10];
        int len = 0;
        while ((len = input.read(buffer)) != -1) {
            md.update(buffer, 0, len);
        }
        input.close();
        // 合成md5
        byte[] bytes = md.digest();// 16汇总 md5 128 bit 1byte=8bit 16byte
                                    // byte-->0x
        // 32位
        StringBuffer sb = new StringBuffer();
        for (byte temp : bytes) {
            String hex = Integer.toHexString(temp & 0xff);// 不一定是1byte 变两位
            if (hex.length() == 1) {
                sb.append("0").append(hex);// 为了达到32 必段填充0
            } else {
                sb.append(hex);
            }
        }
        String md5 = sb.toString().toLowerCase();
        return md5;
    }
}
判断用户输入密码是否正确

1,初次进入未设置密码

private void initDialog() {
		// 初始化对话框
		AlertDialog.Builder builder = new Builder(this);
		// 把xml转换成view
		View v = View.inflate(this, R.layout.dialog_init, null);
		// 输入密码
		final EditText et_dialog_init_pwd = (EditText) v.findViewById(R.id.et_dialog_init_pwd);
		// 确认密码
		final EditText et_dialog_init_confirm = (EditText) v.findViewById(R.id.et_dialog_init_confirm);
		// 确定
		Button bt_dialog_init_ok = (Button) v.findViewById(R.id.bt_dialog_init_ok);
		// 取消
		Button bt_dialog_init_cancel = (Button) v.findViewById(R.id.bt_dialog_init_cancel);
		// 设置确定点击事件
		bt_dialog_init_ok.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// 获取到密码
				String pwd = et_dialog_init_pwd.getText().toString().trim();
				// 判断用户是否输入了密码
				if (TextUtils.isEmpty(pwd)) {
					ToastUtils.safeToast(MainActivity.this, "请输入密码");
					return;
				}

				// 获取到确认密码
				String confirm_pwd = et_dialog_init_confirm.getText().toString().trim();
				// 判断用户是否输入确认密码
				if (TextUtils.isEmpty(confirm_pwd)) {
					ToastUtils.safeToast(MainActivity.this, "请输入确认密码");
					return;
				}
				// 判断用户2次输入的密码是否一致
				if (!pwd.equals(confirm_pwd)) {
					ToastUtils.safeToast(MainActivity.this, "两次密码输入不一致");
					return;
				}

				Intent intent = new Intent(MainActivity.this, SetUpActivity1.class);
				startActivity(intent);

				SharedPreferencesUtils.saveString(MainActivity.this, ConstansUtils.SJFD_PWD, Md5Utils.getMd5(pwd));

				// 对话框消失
				dialog.dismiss();
				Log.d(tag, "确定");
				System.out.println("确定");
			}
		});
		// 取消对话框监听
		bt_dialog_init_cancel.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Log.d(tag, "取消");
				dialog.dismiss();
			}
		});

		// 设置view
		builder.setView(v);
		// 展示对话框
		dialog = builder.show();
	}
2,设置过密码,验证
private void setEnterDialog() {
		// 初始化对话框
//		AlertDialog.Builder builder = new Builder(getApplication());
//		AlertDialog.Builder builder = new Builder(getApplicationContext());
//		AlertDialog.Builder builder = new Builder(this);//OK
//		AlertDialog.Builder builder = new Builder(MainActivity.this);//OK
		AlertDialog.Builder builder = new Builder(getBaseContext());//不OK
		// 把xml转换成view
		View v = View.inflate(this, R.layout.dialog_enter_pwd, null);

		// 输入密码
		final EditText et_dialog_init_pwd = (EditText) v.findViewById(R.id.et_dialog_init_pwd);
		// 确定
		Button bt_dialog_init_ok = (Button) v.findViewById(R.id.bt_dialog_init_ok);
		// 取消
		Button bt_dialog_init_cancel = (Button) v.findViewById(R.id.bt_dialog_init_cancel);
		// 设置确定点击事件
		bt_dialog_init_ok.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// 获取到密码
				String pwd = et_dialog_init_pwd.getText().toString().trim();
				// 判断用户是否输入了密码
				if (TextUtils.isEmpty(pwd)) {
					ToastUtils.safeToast(MainActivity.this, "请输入密码");
					return;
				}
				String sjfd_pwdmd5 = SharedPreferencesUtils.getSting(MainActivity.this, ConstansUtils.SJFD_PWD, "");
				// 注意:需要把pwd写在前面
				// 防止程序为null
				String inputmd5=Md5Utils.getMd5(pwd);
				if (!(inputmd5).equals(sjfd_pwdmd5)) {
					ToastUtils.safeToast(MainActivity.this, "密码输入错误");
					return;
				}
				// 获取到用户防盗保护的状态
				boolean result = SharedPreferencesUtils.getBoolean(MainActivity.this, ConstansUtils.SJFD_PROTECTING, false);

				if (result) {
					Intent intent = new Intent(MainActivity.this, LostFindActivity.class);
					startActivity(intent);
				} else {

					Intent intent = new Intent(MainActivity.this, SetUpActivity1.class);
					startActivity(intent);
				}

				// 对话框消失
				dialog.dismiss();
				Log.d(tag, "确定");
				System.out.println("确定");
			}
		});

		bt_dialog_init_cancel.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Log.d(tag, "取消");
				dialog.dismiss();
			}
		});

		// 设置view
		builder.setView(v);
		// 展示对话框
		dialog = builder.show();

	}
手势识别滑动处理
private GestureDetector gestureDetector;
//初始化手势识别器
gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){
			/**
			 * e1 :表示手指第一次触摸屏幕的的值
			 * e2 :表示手指 离开屏幕的值
			 * velocityX : x轴每秒钟移动的像素
			 * velocityY : Y轴的像素
			 */
			@Override
			public boolean onFling(MotionEvent e1, MotionEvent e2,
					float velocityX, float velocityY) {
				
				
				float mMotionEventRaw1x = e1.getRawX();
				float mMotionEventRaw1y = e1.getRawY();
				
				float mMotionEventRaw2x = e2.getRawX();
				float mMotionEventRaw2y = e2.getRawY();
				
				System.out.println("mMotionEventRaw1x---" + mMotionEventRaw1x);
				System.out.println("mMotionEventRaw1y---" + mMotionEventRaw1y);
				System.out.println("mMotionEventRaw2x---" + mMotionEventRaw2x);
				System.out.println("mMotionEventRaw2y---" + mMotionEventRaw2y);
				
				
				System.out.println("velocityX---" + velocityX);
				System.out.println("velocityY---" + velocityY);
				//判断当前x轴的位置移动是否大于y轴位置移动
				if(Math.abs(mMotionEventRaw1y - mMotionEventRaw2y) > Math.abs(mMotionEventRaw1x - mMotionEventRaw2x)){
					return false;
				}
				/**
				 * 说明是下一步
				 */
				if(mMotionEventRaw1x > mMotionEventRaw2x + 50){
					doNext();
				}
				/**
				 * 上一步
				 */
				if(mMotionEventRaw1x < mMotionEventRaw2x + 50){
					doPre();
				}
				
				
				
				return super.onFling(e1, e2, velocityX, velocityY);
			}
			
		});

@Override
	public boolean onTouchEvent(MotionEvent event) {
		//让手势识别器生效
		gestureDetector.onTouchEvent(event);
		return super.onTouchEvent(event);
	}

1、屏蔽竖值方向的滑动;

if(Math.abs((e2.getRawY() - e1.getRawY())) >100){

Toast.makeText(getBaseContext(), "不能这样滑动", 0).show();

return true;

}

2、屏蔽滑动慢

if(Math.abs(velocityX)< 200){

Toast.makeText(getBaseContext(), "滑动有些慢哥们", 0).show();

return true;

}


简单动画处理

//过渡动画
		/**
		 * 第一个参数表示进来的时候的动画
		 * 第二个参数表示出去的时候的动画
		 */
		overridePendingTransition(R.anim.pre_enter, R.anim.pre_exit);
		
		finish();
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="-100%p"
    android:toXDelta="0" 
    android:duration="300"
    >
</translate>

知识拓展:

有些手机上无法出现动画:是因为把播放动画的功能关闭了,为什么关闭呢,是为什么省点;

Android手机省电的几个技巧:

1.不要用动态的壁纸;

2.屏幕亮度调低一些;

3.3G网络关闭使用,2G网络,当然是不需要上网的情况下;

4.关闭手机执行动画;

5.经常杀一下后台的应用;






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值