android app 自动填写短信验证码

public class SmsContentObserver extends ContentObserver {


    private Context mContext;

    private Handler mHandler;//更新UI线程

    private String code;

    private int number;


    public SmsContentObserver(Handler handler, Context context,int number) {
        super(handler);
        this.mContext = context;
        this.mHandler = handler;
        this.number = number;
    }

    @Override
    public void onChange(boolean selfChange, Uri uri) {

        if (uri.toString().equals("content://sms/raw")) {
            return;
        }

        Uri inboxUri = Uri.parse("content://sms/inbox");
        Cursor c = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc");
        if (c != null) {
            if (c.moveToFirst()) {
                String address = c.getString(c.getColumnIndex("address"));
                String body = c.getString(c.getColumnIndex("body"));
                if (!address.equals("此处填写发送验证码的号码") ) {
                    return;
                }
                Pattern pattern = Pattern.compile("(\\d{" + number + "})");
                Matcher matcher = pattern.matcher(body);

                if (matcher.find()) {
                    code = matcher.group(0);
                    mHandler.obtainMessage(1, code).sendToTarget();
                }
            }
        }
        c.close();
    }
}需要在AndroidManifest.xml文件中添加如下权限
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
接下来就可以在我们的activity中使用了点击获取验证码按钮时需要先请求权限,如果相应的权限被允许则可以使用自动填充验证码功能,如果权限不被允许则不能使用自动填充验证码的功能
requestRunntimePermission(new String[]{Manifest.permission.READ_SMS}, new PermissionListener() {
    @Override
    public void granted() {
        smsContentObserver = new SmsContentObserver(handler1, LoginPwdActivity.this, 4);
        LoginPwdActivity.this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, smsContentObserver);
    }

    @Override
    public void denied(List<String> deniedList) {

    }
});

Handler handler1 = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if (msg.what == 1) {
            aQuery.id(R.id.id_edt_code_loginpwd).getEditText().setText("");
           //将从短信中获取到的验证码填写到指定的控件上
aQuery.id(R.id.id_edt_code_loginpwd).getEditText().setText(msg.obj.toString()); } }};
其中requestRunntimePermission()方法是我自己封装的用于判断相应的权限是否被允许,如果没被允许给用户权限申请弹窗
private static PermissionListener mListener;

public static void requestRunntimePermission(String[] permissionList, PermissionListener listener) {
    Activity topActivity = ActivityCollector.getTopActivity();
    if (topActivity == null) {
        return;
    }
    mListener = listener;
    List<String> permissionDenieds = new ArrayList<>();
    for (String permission : permissionList) {
        if (ContextCompat.checkSelfPermission(topActivity, permission) != PackageManager.PERMISSION_GRANTED) {
            permissionDenieds.add(permission);
        }
    }

    if (!permissionDenieds.isEmpty()) {
        ActivityCompat.requestPermissions(topActivity, permissionDenieds.toArray(new String[permissionDenieds.size()]), 1);
    } else {
        mListener.granted();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case 1:
            if (grantResults.length > 0) {
                List<String> deniedPermissionList = new ArrayList<>();
                for (int i = 0; i < grantResults.length; i++) {
                    int grantResult = grantResults[i];
                    String permission = permissions[i];

                    if (grantResult != PackageManager.PERMISSION_GRANTED) {
                        deniedPermissionList.add(permission);
                    }
                }

                if (deniedPermissionList.isEmpty()) {
                    mListener.granted();
                } else {
                    mListener.denied(deniedPermissionList);
                }
            }
    }
}
ActivityCollector类如下:
public class ActivityCollector {

    private static List<Activity> activityList = new ArrayList<>();

    public static void addActivity(Activity activity) {
        activityList.add(activity);
    }

    public static void removeActivity(Activity activity) {
        activityList.remove(activity);
    }

    /**
     * 获取栈顶activity
     */
    public static Activity getTopActivity() {
        if (activityList.isEmpty()) {
            return null;
        } else {
            return activityList.get(activityList.size() - 1);
        }
    }

}
PermissionListener接口如下:
public interface PermissionListener {

    void granted();

    void denied(List<String> deniedList);

}
表单填充和密码管理软件 表单自动填写 -填写表格从未如此简单! 自动填充表单是一个完整的解决方案,节省您的时间,自动填写网页表单,自动密码输入(自动填充密码,登录),并提供一个简单的方法来保存网页形式的任何复杂。 下载表格填写和密码管理软件 表格自动填充支持Internet Explorer,MSN浏览器和傲游 “下载自动填充表格软件 为什么你需要表单自动填充 厌倦了填写您的姓名,地址,电子邮件地址等登记表格一遍又一遍吗? 厌倦了输入用户名和密码,同时访问Web邮件帐户,银行帐户等? ? 多花时间填写表格,当您注册在不同的地点,开立账户等? ? 经常在网上购买吗? 厌倦了输入信用卡信息和结算信息吗? 想将它存放在安全的地方,它会自动填写? ? 你有没有忘记或遗失了你的密码? 寻找一个简单的解决方案填写表格吗? 尝试表单自动填充-自动表单填写和密码管理器! - 表格自动填充会帮你自动填写任何Web窗体。 - 只需点击鼠标,就可以保存和填写网页表单。 - 你将永远不会再次输入用户名和密码 - 表单自动填写软件,你可以安全地登录,只需按一下 是先进的自动填充表单自动填充表格软件,节省您的时间,当您填写在线表格,登录不同的网站,等表??格自动填充软件轻松地节省了您输入的信息,同时填写表格,并自动进入这个信息每次你需要填写表格。 自动自动填充表格软件,你将能够填写表格,只要按一下任何复杂的。 表单自动填充的主要特点 > 自动保存Web窗体 表格自动填充提供了一种简单的方式来保存网页形式的任何复杂性,登录名,密码。 使用热键可以简化过程中保存和填写网页表单。 >自动填写 表单 创建的窗体中的信息自动填写网页表单,表单自动填充节省您的时间。 只需填写表格,连同所需的数据及表格自动填充将这些数据填入到您的网页表格。 - 使用表单自动填充,您可以填写表格,并填写和提交表单的自动。 - “只填写空字段”选项,只填写空的web表单字段。 如果一些领域已经包含的信息,你需要将信息保存在这些领域中,这个选项是非常有用的。 因此,表单自动填写只有在空的表单字段中插入相应的信息。 - “获取完整的字段”选项的下拉列表。 使用此选项,您可以保存的完整列表“选择”类型“字段(S)中存储的信息,因此您可以轻松地选择所需的数据,从下拉列表脱机。 - 当,填充一个网页表单FormAutoFill自动选择的形式相匹配的网页的URL。 - 您可以轻松地设置在填充表格和提交资料的延迟。 - 在填写表格时,您可以选择“表单域连接”的规定:“由字段名和字段类型”或“字段顺序号和字段类型”,大大增加了数量,可以使用表格自动填充填充的形式。 - 对于每一个Web表单中,您可以设置默认的填充表单的动作,根据您的需要(“默认操作”,“不要求填写表格”,“不求回报”的填写及提交表格)。 - “批量模式”,填写并提交表格在一个周期为1。 现在,您可以简化您的工作 - 只需选择你想自动填写和提交,填写??并提交表格周期之间设置延迟组的形式。 FormAutoFill支持一个以上的提交按钮的形式。 所以,你可以很容易地选择提交按钮,你想同时申请“填写和提交”行动 >自动填写 登录名和密码 使用表单自动填写登记表,登录窗口,等您可以轻松地自动填写网页上的登录名和密码, > 密码管理器 表格自动填充格式安全地存储您的密码,信用卡详细资料和其他敏感信息,往往需要同时填写网页表单。 > 高级情报安全 表单自动填充你可以安全地存储您的登录信息,密码,信用卡号码,在一个地方和任何其他机密信息。 表格自动填充保护您的表格从他人的信息 - 使用AES 256位密钥加密的所有信息进行加密。 快速启动网站 表格自动填充让您登录到任何网站,只需点击一下。 只要按一下“开始”按钮,自动填写表单自动打开必要的网页,你可以很容易地填写和提交表格。 轻松管理表格和表格信息 表格自动填充,您可以创建许多不同的形式,轻松地管理表单信息。 “批次模式”,可以轻松地管理表单和表格信息。 “按名称排序形式”的功能。 > 高级密码生成器 先进的随机密码生成器来生成任何长度的密码。 表格自动填充使用通用的随机数发生器(URAND),的子程序生成随机密码。 通用的随机数发生器(URAND)是用于产生的时间间隔(0,1)中的均匀分布的浮点数的子程序。 URAND保证有一个完整长度的周期。 >“ 导出/导入功能 - 导出/导入表格数据库 - 轻松移动数据库之间不同版本的个人电脑和程序。 - 导入从CSV格式的文件中的信息。 现在,你可以很容易地导入从任何程序如Excel,Word等软件,允许将数据保存在CSV格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值