GVKun编程网logo

android------实现手机验证码登录(android短信验证码登录)

7

如果您对android------实现手机验证码登录和android短信验证码登录感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解android------实现手机验证码登录的各种细节,并对an

如果您对android------实现手机验证码登录android短信验证码登录感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解android------实现手机验证码登录的各种细节,并对android短信验证码登录进行深入的分析,此外还有关于android 如何实现手机实现来电监听、Android 实现手机归属地的查询功能、Android 实现手机拨打电话的功能、Android 获取随机验证码功能示例的实用技巧。

本文目录一览:

android------实现手机验证码登录(android短信验证码登录)

android------实现手机验证码登录(android短信验证码登录)

引言:今天研究了一下我们做的项目的功能。做了关于手机验证码的功能。做的还是比较丑,目前只是实现功能,美化会再后期进行。

正文:我用的时MobTech。前两步操作我就不说了,自己看文档解决,很简单。我主要说说文里没有的(我没找到的)。

配置弄好了就开始写代码了,因为现在是完成功能,所以画面做的比较难看。目前SMSSDK提供两套接口方案,一种是默认的UI集成即可。另一种是不使用他们的UI,直接调用发送和验证接口。所以我用的是第二种。

思路就是:首先写手机号,获取验证码,输入验证码,然后提示登录成功。下图是我的界面设计,每个组件的id通过名字就知道是什么意思。

  • 页面布局.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editTextPhoneNum"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="手机号"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.161"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.11" />

    <Button
        android:id="@+id/buttonCode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="获取验证码"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.914"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.105"
        tools:text="获取验证码" />

    <EditText
        android:id="@+id/editTextCode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="验证码"
        android:importantForAutofill="no"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.161"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.215" />

    <Button
        android:id="@+id/buttonLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="登录"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.897"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.21" />

</androidx.constraintlayout.widget.ConstraintLayout>
  • MainActivity.java
    • 首先是获取验证码,如果你没有输入手机号或者手机号不符合规则,会有提示信息。验证码获取不了。
    • 其次是如果手机号符合了第一条内容,则调用java SMSSDK.getVerificationCode(country, phone);来获得手机验证码(请求验证码,其中country表示国家代码,如“86”;phone表示手机号码,如“13800138000”)。
    • 当收到验证码时候输入验证码进行校验,调用java SMSSDK.submitVerificationCode(country, phone, code);来进行校验,对则登录成功,错则登录失败。
package com.example.phonecode;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import org.json.JSONException;
import org.json.JSONObject;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;

public class MainActivity extends AppCompatActivity {
    private Button buttonCode,buttonLogin;
    private EditText editTextPhoneNum,editTextCode;
    private String phoneNum,code;
    private EventHandler eh;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonCode = findViewById(R.id.buttonCode);
        buttonLogin = findViewById(R.id.buttonLogin);
        editTextCode = findViewById(R.id.editTextCode);
        editTextPhoneNum = findViewById(R.id.editTextPhoneNum);

         eh = new EventHandler() {
            @Override
            public void afterEvent(int event, int result, Object data) {
                    if (result == SMSSDK.RESULT_COMPLETE){
                        //回调完成
                        if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                            //提交验证码成功
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
                                }
                            });
                        }else if (event == SMSSDK.EVENT_GET_VOICE_VERIFICATION_CODE){
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this,"语音验证发送",Toast.LENGTH_SHORT).show();
                                }
                            });
                        }
                        else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){
                            //获取验证码成功
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this,"验证码已发送",Toast.LENGTH_SHORT).show();
                                }
                            });
                        }else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){
                            Log.i("test","test");
                        }
                    }else{
                        ((Throwable)data).printstacktrace();
                        Throwable throwable = (Throwable) data;
                        throwable.printstacktrace();
                        Log.i("1234",throwable.toString());
                        try {
                            JSONObject obj = new JSONObject(throwable.getMessage());
                            final String des = obj.optString("detail");
                            if (!TextUtils.isEmpty(des)){
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        Toast.makeText(MainActivity.this,des,Toast.LENGTH_SHORT).show();
                                    }
                                });
                            }
                        } catch (JSONException e) {
                            e.printstacktrace();
                        }
                    }
                }
        };

    //注册一个事件回调监听,用于处理SMSSDK接口请求的结果
        SMSSDK.registerEventHandler(eh);
        buttonCode.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                phoneNum = editTextPhoneNum.getText().toString();
                if(!phoneNum.isEmpty()){
                    if(Utils.checkTel(phoneNum)){ //利用正则表达式获取检验手机号
                        // 获取验证码
                        SMSSDK.getVerificationCode("86", phoneNum);
                    }else{
                        Toast.makeText(getApplicationContext(),"请输入有效的手机号",Toast.LENGTH_LONG).show();
                    }
                }else {
                    Toast.makeText(getApplicationContext(),"请输入手机号",Toast.LENGTH_LONG).show();
                    return;
                }
                phoneNum = editTextPhoneNum.getText().toString();
            }
        });
        buttonLogin.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                code = editTextCode.getText().toString();
                if(!code.isEmpty()){
                    //提交验证码
                    SMSSDK.submitVerificationCode("86", phoneNum, code);
                }else{
                    Toast.makeText(getApplicationContext(),"请输入验证码",Toast.LENGTH_LONG).show();
                    return;
                }
            }
        });
    }
    // 使用完EventHandler需注销,否则可能出现内存泄漏
    @Override
    protected void onDestroy() {
        super.onDestroy();
        SMSSDK.unregisterEventHandler(eh);
    }
}

  • 手机号校验
package com.example.phonecode;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Utils {
    /**
     * 正则匹配手机号码:
     */
    public static boolean checkTel(String tel){
        Pattern p = Pattern.compile("^[1][3,4,5,7,8,9][0-9]{9}$");
        Matcher matcher = p.matcher(tel);
        return matcher.matches();
    }
}
  • 选权限说明:将下面的代码添加到AndroidManifest.xml里,如下图

<!-- 可选权限说明-->
<uses-permission
     android:name="android.permission.INTERNET" />
允许应用程序联网(必须)
 <uses-permission
     android:name="android.permission.ACCESS_WIFI_STATE" />
允许访问WiFi网络状态信息(必须)
 <uses-permission
     android:name="android.permission.READ_PHONE_STATE" />
允许读取手机状态(必须)
 <uses-permission
     android:name="android.permission.ACCESS_NETWORK_STATE" />
允许访问网络状态(必须)
 <uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
允许写手机存储(必须)
 <uses-permission
     android:name="android.permission.RECEIVE_SMS" />
GUI自动填充验证码功能(非必须)
 <uses-permission
     android:name="android.permission.READ_SMS" />
从短信中读取验证码接口(非必须)
 <uses-permission
     android:name="android.permission.READ_CONTACTS" />
应用内好友功能(非必须)

运行结果:

  • 手机号为空,提示输入手机号

  • 手机号格式不正确提示

  • 手机号正确输入

  • 验证码输入错误
  • 验证码输入正确

后面两个功能就不实现了,截图时候忘了给手机打马赛克了,读者自己实现吧。有什么不懂得,可以留言,指出。如果有大佬发现问题或者提供更好得方法,请留言,小弟感激不尽。

android 如何实现手机实现来电监听

android 如何实现手机实现来电监听

需要这样:这个app在手机里没有启动,但是,如果外面有人打电话进来,这个app的一个activity类自动响应,请问如何实现?

Android 实现手机归属地的查询功能

Android 实现手机归属地的查询功能

本实例将向大家详细介绍,在 Android 中如何调用服务器端提供的 webservice 获取手机号码归属地信息,实现典型的分布式应用。

package cn.itcast.mobile.address;  
  
import java.io.InputStream;  
  
import cn.itcast.service.MobileInfoService;  
import Android.app.Activity;  
import Android.os.Bundle;  
import Android.util.Log;  
import Android.view.View;  
import Android.widget.Button;  
import Android.widget.EditText;  
import Android.widget.TextView;  
import Android.widget.Toast;  
  
public class MainActivity extends Activity {  
    private EditText mobileText;  
    private TextView addressView;  
    private static final String TAG = "MainActivity";  
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        mobileText = (EditText)this.findViewById(R.id.mobile);  
        addressView = (TextView)this.findViewById(R.id.address);  
        Button button = (Button)this.findViewById(R.id.button);  
        button.setOnClickListener(new View.OnClickListener() {            
            @Override  
            public void onClick(View v) {  
                String mobile = mobileText.getText().toString();  
                InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("mobilesoap.xml");  
                try {  
                    addressView.setText(MobileInfoService.getMobileAddress(inStream, mobile));  
                } catch (Exception e) {  
                    Log.e(TAG, e.toString());  
                    Toast.makeText(MainActivity.this, "查询失败", 1).show();  
                }  
            }  
        });  
    }  
}

界面文件: 

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"  
    Android:orientation="vertical"  
    Android:layout_width="fill_parent"  
    Android:layout_height="fill_parent"  
    >  
<TextView    
    Android:layout_width="fill_parent"   
    Android:layout_height="wrap_content"   
    Android:text="@string/mobile"  
    />  
      
    <EditText   
    Android:layout_width="fill_parent"   
    Android:layout_height="wrap_content"   
    Android:id="@+id/mobile"  
    />  
      
    <Button  
     Android:layout_width="wrap_content"   
    Android:layout_height="wrap_content"   
    Android:text="@string/button"  
    Android:id="@+id/button"  
    />  
      
    <TextView    
    Android:layout_width="fill_parent"   
    Android:layout_height="wrap_content"   
    Android:id="@+id/address"  
    />  
</LinearLayout>

重点实现代码:
package cn.itcast.service;  
  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.net.HttpURLConnection;  
import java.net.URL;  
import java.util.HashMap;  
import java.util.Map;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
  
import org.xmlpull.v1.XmlPullParser;  
  
import Android.util.Xml;  
import cn.itcast.utils.StreamTool;  
  
public class MobileInfoService {  
  
      
    private static String readSoapFile(InputStream inStream, String mobile) throws Exception{  
        byte[] data = StreamTool.readInputStream(inStream);  
        String soapxml = new String(data);  
        Map<String, String> params = new HashMap<String, String>();  
        params.put("mobile", mobile);  
        return replace(soapxml, params);  
    }  
  
      
    public static String replace(String xml, Map<String, String> params)throws Exception{  
        String result = xml;  
        if(params!=null && !params.isEmpty()){  
            for(Map.Entry<String, String> entry : params.entrySet()){  
                String name = "\\{1}quot;+ entry.getKey();  
                Pattern pattern = Pattern.compile(name);  
                Matcher matcher = pattern.matcher(result);  
                if(matcher.find()){  
                    result = matcher.replaceAll(entry.getValue());  
                }  
            }  
        }  
        return result;  
    }  
  
    public static String getMobileAddress(InputStream inStream, String mobile)throws Exception{  
        String soap = readSoapFile(inStream, mobile);  
        byte[] data = soap.getBytes();  
        URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");  
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
        conn.setRequestMethod("POST");  
        conn.setConnectTimeout(5 * 1000);  
        conn.setDoOutput(true);//如果通过post提交数据,必须设置允许对外输出数据   
        conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");  
        conn.setRequestProperty("Content-Length", String.valueOf(data.length));  
        OutputStream outStream = conn.getOutputStream();  
        outStream.write(data);  
        outStream.flush();  
        outStream.close();  
        if(conn.getResponseCode()==200){  
            return parseResponseXML(conn.getInputStream());  
        }  
        return null;  
    }  
  
    private static String parseResponseXML(InputStream inStream) throws Exception{  
        XmlPullParser parser = Xml.newPullParser();  
        parser.setInput(inStream, "UTF-8");  
        int eventType = parser.getEventType();//产生第一个事件   
        while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件   
            switch (eventType) {      
            case XmlPullParser.START_TAG:  
                String name = parser.getName();//获取解析器当前指向的元素的名称   
                if("getMobileCodeInfoResult".equals(name)){  
                    return parser.nextText();  
                }  
                break;  
            }  
            eventType = parser.next();  
        }  
        return null;  
    }  
}  

最后提醒大家一句,记得在项目清单文件中,加入网络访问权限。
<!-- 访问网络的权限 -->
<uses-permission Android:name="android.permission.INTERNET"/>

Android 实现手机拨打电话的功能

Android 实现手机拨打电话的功能

一部手机最常用的功能就是打电话和发短信了,在Android开发中我们如何通过程序拨打电话呢?本文就给出一个用Android手机拨打电话的简单的实例。

       下面是开发此实例的具体步骤:

       一、新建一个Android工程,命名为phoneCallDemo。

       二、设计程序的界面,打开main.xml把内容修改如下:

XML/HTML代码

<?xml version="1.0" encoding="utf-8"?> 
 
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
  android:orientation="vertical" 
 
  android:layout_width="fill_parent" 
 
  android:layout_height="fill_parent" 
 
  > 
 
  <TextView 
 
  android:layout_width="fill_parent" 
 
  android:layout_height="wrap_content" 
 
  android:text="Please input the phoneNumer:" 
 
  /> 
 
  <EditText 
 
  android:id="@+id/et1" 
 
  android:layout_width="fill_parent" 
 
  android:layout_height="wrap_content" 
 
  android:phoneNumber="true" 
 
  /> 
 
  <Button 
 
  android:id="@+id/bt1" 
 
  android:layout_width="wrap_content" 
 
  android:layout_height="wrap_content" 
 
  android:text="Call Phone" 
 
  /> 
 
  </LinearLayout> 

  三、增加拨打电话的权限,打开AndroidManifest.xml,修改代码如下:

XML/HTML代码

<?xml version="1.0" encoding="utf-8"?> 
 
  <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
 
  package="com.android.test" 
 
  android:versionCode="1" 
 
  android:versionName="1.0"> 
 
  <application android:icon="@drawable/icon" android:label="@string/app_name"> 
 
  <activity android:name=".PhoneCallDemo" 
 
  android:label="@string/app_name"> 
 
  <intent-filter> 
 
  <action android:name="android.intent.action.MAIN" /> 
 
  <category android:name="android.intent.category.LAUNCHER" /> 
 
  </intent-filter> 
 
  </activity> </application> 
 
  <uses-sdk android:minSdkVersion="3" />  
 
  <uses-permission android:name="android.permission.CALL_PHONE"> 
 
  </uses-permission> 
 
  </manifest> 

 四、主程序phoneCallDemo.java代码如下:

 package com.android.test;import android.app.Activity; 
 
  import android.content.Intent; 
 
  import android.net.Uri; 
 
  import android.os.Bundle; 
 
  import android.view.View; 
 
  import android.widget.Button; 
 
  import android.widget.EditText; 
 
  import android.widget.Toast;
 
 public class PhoneCallDemo extends Activity { 
 
  private Button bt; 
 
  private EditText et; 
 
  public void onCreate(Bundle savedInstanceState) { 
 
  super.onCreate(savedInstanceState); 
 
  setContentView(R.layout.main); 
 
  //取得资源 
 
  bt = (Button)findViewById(R.id.bt1); 
 
  et = (EditText)findViewById(R.id.et1); 
 
  //增加事件响应 
 
  bt.setonClickListener(new Button.OnClickListener(){ @Override 
 
  public void onClick(View v) { 
 
  //取得输入的电话号码串 
 
  String inputStr = et.getText().toString(); 
 
  //如果输入不为空创建打电话的Intent 
 
  if(inputStr.trim().length()!=0) 
 
  { 
 
  Intent phoneIntent = new Intent("android.intent.action.CALL",  Uri.parse("tel:" + inputStr)); 
 
  //启动 
 
  startActivity(phoneIntent); 
 
  } 
 
  //否则Toast提示一下 
 
  else{ 
 
  Toast.makeText(PhoneCallDemo.this,"不能输入为空",Toast.LENGTH_LONG).show(); 
 
  } 
 
  } 
 
  }); 
 
  } 

以上就是Android 开发拨打电话的简单示例,后续继续补充相关资料,谢谢大家对本站的支持!

Android 获取随机验证码功能示例

Android 获取随机验证码功能示例

验证码功能在各大网站都能用到,下面小编通过实例代码给大家分享Android 获取随机验证码功能,具体代码如下所示:

 package cn.hk.image; 
import java.awt.Basicstroke; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.util.Random; 
import javax.imageio.ImageIO; 
public class VerifyCode { 
  private int w = 70; 
  private int h = 35; 
  private Random r = new Random(); 
  // {"宋体","华文楷体","黑体","华文新魏","华文隶书","微软雅黑","楷体_GB2312"} 
  private String[] fontNames = {"宋体","楷体_GB2312"}; 
  // 可选字符 
  private String codes = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ"; 
  // 背景色 
  private Color bgColor = new Color(255,255,255); 
  // 验证码上的文本 
  private String text ; 
  // 生成随机的颜色 
  private Color randomColor () { 
    int red = r.nextInt(150); 
    int green = r.nextInt(150); 
    int blue = r.nextInt(150); 
    return new Color(red,green,blue); 
  } 
  // 生成随机的字体 
  private Font randomFont () { 
    int index = r.nextInt(fontNames.length); 
    String fontName = fontNames[index];//生成随机的字体名称 
    int style = r.nextInt(4);//生成随机的样式,0(无样式),1(粗体),2(斜体),3(粗体+斜体) 
    int size = r.nextInt(5) + 24; //生成随机字号,24 ~ 28 
    return new Font(fontName,style,size); 
  } 
  // 画干扰线 
  private void drawLine (BufferedImage image) { 
    int num = 3;//一共画3条 
    Graphics2D g2 = (Graphics2D)image.getGraphics(); 
    for(int i = 0; i < num; i++) {//生成两个点的坐标,即4个值 
      int x1 = r.nextInt(w); 
      int y1 = r.nextInt(h); 
      int x2 = r.nextInt(w); 
      int y2 = r.nextInt(h);  
      g2.setstroke(new Basicstroke(1.5F));  
      g2.setColor(Color.BLUE); //干扰线是蓝色 
      g2.drawLine(x1,y1,x2,y2);//画线 
    } 
  } 
  // 随机生成一个字符 
  private char randomChar () { 
    int index = r.nextInt(codes.length()); 
    return codes.charat(index); 
  } 
  // 创建BufferedImage,图片缓存区 
  private BufferedImage createImage () { 
    BufferedImage image = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);  
    Graphics2D g2 = (Graphics2D)image.getGraphics();  
    g2.setColor(this.bgColor); 
    g2.fillRect(0,w,h); 
    return image; 
  } 
  // 调用这个方法得到验证码 
  public BufferedImage getimage () { 
    BufferedImage image = createImage();//创建图片缓冲区  
    Graphics2D g2 = (Graphics2D)image.getGraphics();//得到绘制环境 
    StringBuilder sb = new StringBuilder();//用来装载生成的验证码文本 
    // 向图片中画4个字符 
    for(int i = 0; i < 4; i++) {//循环四次,每次生成一个字符 
      String s = randomChar() + "";//随机生成一个字母  
      sb.append(s); //把字母添加到sb中 
      float x = i * 1.0F * w / 4; //设置当前字符的x轴坐标 
      g2.setFont(randomFont()); //设置随机字体 
      g2.setColor(randomColor()); //设置随机颜色 
      g2.drawString(s,x,h-5); //画图 
    } 
    this.text = sb.toString(); //把生成的字符串赋给了this.text 
    drawLine(image); //添加干扰线 
    return image;     
  } 
  // 返回验证码图片上的文本 
  public String getText () { 
    return text; 
  } 
  // 保存图片到指定的输出流 
  public static void output (BufferedImage image,OutputStream out)  
        throws IOException { 
    ImageIO.write(image,"JPEG",out); 
  } 
} 

以上所述是小编给大家介绍的Android 获取随机验证码功能示例,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

今天的关于android------实现手机验证码登录android短信验证码登录的分享已经结束,谢谢您的关注,如果想了解更多关于android 如何实现手机实现来电监听、Android 实现手机归属地的查询功能、Android 实现手机拨打电话的功能、Android 获取随机验证码功能示例的相关知识,请在本站进行查询。

本文标签: