验证码mob集成&本地验证生成&短信截获
来源:互联网 发布:mac pro 支持pcie ssd 编辑:程序博客网 时间:2024/06/01 08:25
1.本地自定义view生成验证码:
这个是实现代码:
public class YANZHENGMA extends View{ private Paint paint; private int viewWidth; private int viewHeight; private String [] codes=new String[4]; public String[] getCodes() { return codes; } public YANZHENGMA(Context context) { super(context); init(); } public YANZHENGMA(Context context, AttributeSet attrs) { super(context, attrs); init(); } public YANZHENGMA(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { paint = new Paint(); paint.setAntiAlias(true); paint.setFakeBoldText(RandomUtil.getboolen()); paint.setTextSize(100); paint.setStrokeWidth(10); paint.setShader(null); setBackgroundColor(RandomUtil.getBgRandomColor()); setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { invalidate(); } }); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//获取高度 viewWidth=getWidth(); viewHeight=getHeight(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //生成背景色 //生成随机干扰线 paint.setColor(RandomUtil.getTextRandomColor()); //int linenum=RandomUtil.getRandomInt(4); for (int i = 0; i <4 ; i++) { paint.setColor(RandomUtil.getTextRandomColor()); canvas.drawLine(RandomUtil.getRandomFloat(viewWidth),RandomUtil.getRandomFloat(viewHeight),RandomUtil.getRandomFloat(viewWidth),RandomUtil.getRandomFloat(viewHeight),paint); } //生成干扰点 int pointnum=RandomUtil.getRandomInt(20); for (int i = 0; i <20 ; i++) { paint.setColor(RandomUtil.getTextRandomColor()); canvas.drawPoint(RandomUtil.getRandomFloat(viewWidth),RandomUtil.getRandomFloat(viewHeight),paint); } //生成文字 for (int i = 0; i < 4; i++) { paint.setTextSkewX(RandomUtil.getRandomFloat(1)-0.5f); paint.setColor(RandomUtil.getTextRandomColor()); float textX= RandomUtil.getRandomFloat(4)+viewWidth/4*i+viewWidth/8; float textY= RandomUtil.getRandomFloat(20)-10-10+viewHeight; codes[i]=RandomUtil.getRandomText()+""; canvas.drawText(codes[i] ,textX,textY,paint); } }}这个是随机工具类:
public class RandomUtil { static Random mRandom=new Random(); //生成随机字符串 public static char getRandomText() { int i = mRandom.nextInt(42) + 48; while (i > 57 && i < 65) { i = mRandom.nextInt(42) + 48; } char tmp = (char) (i); return tmp; } //生成背景色 public static int getBgRandomColor() { int r = mRandom.nextInt(140) + 115; int g = mRandom.nextInt(140) + 115; int b = mRandom.nextInt(140) + 115; return Color.rgb(r, g, b); } //字体颜色 public static int getTextRandomColor() { int r = mRandom.nextInt(90) + 40; int g = mRandom.nextInt(90) + 40; int b = mRandom.nextInt(90) + 40; return Color.rgb(r, g, b); } //android设置Typeface字体 public static Typeface getType(){ //Typeface.defaultFromStyle(Typeface) return null; } //随机boolen public static boolean getboolen() { return mRandom.nextBoolean(); } //随机int public static int getRandomInt(int a) { // rand return mRandom.nextInt(a); } //随机float public static float getRandomFloat(int a) { // rand return mRandom.nextInt(a*100)/100f; }}2.这个是第三方的短信验证码使用的是mob的第三方短信验证码
需要做的操作将arr包和第三方库导入
gradle文件中配置:
repositories { flatDir{ dirs 'libs' }}dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' testCompile 'junit:junit:4.12' compile files('libs/MobTools-2017.0321.1624.jar') //短信验证码依赖 compile name:'SMSSDK-2.1.4',ext:'aar' compile name:'SMSSDKGUI-2.1.4',ext:'aar'}
application中初始化
public class APP extends Application { @Override public void onCreate() { super.onCreate(); SMSSDK.initSDK(this, "1e3249818fa90", "4f8cb6e6ea65cdfd878798701362f6aa"); }}
代码中使用打开登录(网上找的方法比较清晰):
public void getyanzhen(View view) { //打开注册页面 RegisterPage registerPage = new RegisterPage(); // registerPage. registerPage.setRegisterCallback(new EventHandler() { public void afterEvent(int event, int result, Object data) {// 解析注册结果 if (result == SMSSDK.RESULT_COMPLETE) { @SuppressWarnings("unchecked") HashMap<String,Object> phoneMap = (HashMap<String, Object>) data; String country = (String) phoneMap.get("country"); String phone = (String) phoneMap.get("phone");// 提交用户信息(此方法可以不调用) registerUser(country, phone); } } }); registerPage.show(this); }
3.自己写后台接入时,在app中获取验证码:
private SmsObserver mSmsObserver; private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == 1) { String code = (String) msg.obj; // mSmsTV.setText(code); Log.e( "handleMessage: ",code ); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSmsObserver = new SmsObserver(this, mHandler); Uri smsUri = Uri.parse("content://sms"); getContentResolver().registerContentObserver(smsUri, true, mSmsObserver);//注册短信uri的监 } @Override protected void onPause() { super.onPause(); getContentResolver().unregisterContentObserver(mSmsObserver); }
public class SmsObserver extends ContentObserver { private Context mContext; private Handler mHandler;//更新ui public SmsObserver(Context context, Handler handler) { super(handler); mContext = context; mHandler = handler; } @Override public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); /* 收到一条短信,onChange()会执行两次,uri不同 */ if (uri.toString().equals("content://sms/raw")) {//未写入数据库,不进行任何操作 return; } else {//此时已经写入数据库 Uri inboxUri = Uri.parse("content://sms/inbox"); /* 按照日期倒序排序 */ Cursor cursor = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc"); if (cursor != null) { if (cursor.moveToFirst()) {//游标移动到first位置 /* 发件人的号码 */ String address = cursor.getString(cursor.getColumnIndex("address")); /* 短信内容 */ String body = cursor.getString(cursor.getColumnIndex("body")); Log.i("wyk", "address:" + address + ",body:" + body); /* 利用正则提取验证码(根据实际情况修改) */ Pattern pattern = Pattern.compile("(\\d{6})");//提取六位数字 Matcher matcher = pattern.matcher(body);//进行匹配 if(matcher.find()){//匹配成功 String code = matcher.group(0); Message msg = mHandler.obtainMessage(1, code); mHandler.sendMessage(msg); Log.i("wyk","code:"+code); } } cursor.close(); } } }}
阅读全文
0 0
- 验证码mob集成&本地验证生成&短信截获
- 集成短信验证码--Mob.com
- Android开发:app工程集成mob短信验证码功能
- android_app开发集成mob短信验证码功能
- Android集成Mob平台获取短信验证码
- Android集成Mob平台获取短信验证码
- mob短信验证码功能集成 ------未上线
- 集成mob的SMSSDK获取短信验证码的Demo
- 集成Mob第三方的短信验证码功能
- 短信验证安卓集成mob.com
- 短信验证安卓集成mob.com
- iOS Mob短信验证码
- MOB短信验证码开发
- mob短信验证错误码
- 使用mob实现短信验证码验证
- Mob- 短信验证使用
- Mob短信验证
- Mob短信验证
- C++ Prime 之类类型转换(2)
- PHP性能优化
- 单页面多路由区域操作
- eclipse 开发 android 使用 tabLayout报错如何解决
- bash on win 10
- 验证码mob集成&本地验证生成&短信截获
- 谈谈HPC可否掀起下一轮技术热潮
- Java基础——ConcurrentHashMap源码分析
- JAVA反射机制案例解析
- lambda
- 求无序数组中两元素相加等于特定值的索引
- CAM350 导出SMT坐标文件
- Kmeans算法详解及MATLAB、Python实现
- 八大排序