检测sim卡是否绑定&获取电话管理者&MD5加密&登录处理判断逻辑&手势识别滑动处理&简单动画处理
2016-06-04 20:41
393 查看
获取到电话管理者
1,初次进入未设置密码
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;
}
简单动画处理
知识拓展:
有些手机上无法出现动画:是因为把播放动画的功能关闭了,为什么关闭呢,是为什么省点;
Android手机省电的几个技巧:
1.不要用动态的壁纸;
2.屏幕亮度调低一些;
3.3G网络关闭使用,2G网络,当然是不需要上网的情况下;
4.关闭手机执行动画;
5.经常杀一下后台的应用;
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.经常杀一下后台的应用;
相关文章推荐
- Python使用函数默认值实现函数静态变量的方法
- 顺时针打印矩阵
- 识别'低效执行'的SQL语句
- webrtc成功编译(windows vs2015)
- 二叉树前、中、后及层次非递归遍历
- 单线程生产,多线程消费
- android 目录文件
- JavaScript 各种遍历方式详解
- [platform]linux platform device/driver(二)--Platform Device和Platform_driver注册过程之详细代码
- C++中istream_iterator 与 ostream_iterator的用法
- Android学习笔记之进度条
- Webx
- php的tingkphp框架下的前后交互过程
- Guava base -- Preconditions
- 传世
- 学术诚信与道德
- 配置环境变量
- Linux shell 指令
- 负载均衡之haproxy详解
- 验证struts2中action的查找路径