Android实现自动填充验证码

来源:互联网 发布:初学者羽毛球拍知乎 编辑:程序博客网 时间:2024/06/05 08:10

Android实现自动填充验证码

实现步骤:

  1. 创建Receiver
  2. 静态注册Receiver
  3. 监听Activity回调获取验证码
  4. 验证码的解析与填充

1.Receiver的创建与回调的创建

public class MyReceiver extends BroadcastReceiver {    private static final String TAG = "MainActivityInfo";    public CallBack callBack ;    public interface  CallBack{        void setMsg(String s);    }    @Override    public void onReceive(Context context, Intent intent) {        if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {            Log.i(TAG, "onReceive: ");            StringBuilder builder = new StringBuilder();            //接收由SMS传过来的数据            Bundle bundle = intent.getExtras();            //判断是否由数据            if (bundle != null) {                //通过pdus可以接收到的所有短信消息                Object[] pdus = (Object[]) bundle.get("pdus");                //构建短信对象array,并依据收到短信长度来构建array的大小                SmsMessage[] smsMessages = new SmsMessage[pdus.length];                for (int i = 0; i < smsMessages.length; i++) {                    smsMessages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);                }                //将收来的短信合并自定义短信于StringBuild当中                for (SmsMessage message : smsMessages) {                    builder.append("短信来源");                    //获取短信的号码                    builder.append(message.getDisplayOriginatingAddress());                    //获取短信的内容                    builder.append("\n短信内容\n");                    builder.append(message.getDisplayMessageBody());                }                System.out.println(builder.toString());                callBack = MainActivity.callBack;                callBack.setMsg(builder.toString());            }        }    }}

2.静态注册Receiver(注册之后才可以接收到收到的短信)

<receiver android:name=".MyReceiver"><intent-filter android:priority="800"> //优先级    <action                             android:name="android.provider.Telephony.SMS_RECEIVED" /></intent-filter></receiver>

3.Activity通过回调获取到短信

public class MainActivity extends AppCompatActivity implements MyReceiver.CallBack{    private TextView tv_content ;    public static MyReceiver.CallBack callBack ;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        callBack = this;        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        SharedPreferences preferences = getSharedPreferences("Brioal", MODE_WORLD_READABLE);        SharedPreferences.Editor editor = preferences.edit();        editor.putString("Desc", "监听收到的短信,可用于自动填写验证码");        editor.apply();        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                startActivity(new Intent(MainActivity.this, SummaryActivity.class));            }        });        tv_content = (TextView) findViewById(R.id.main_tv_content);    }    @Override    public void setMsg(String s) {       ///短信内容的解析与填充       ...    }
0 0