Android实现自动填充验证码
实现步骤:
- 创建Receiver
- 静态注册Receiver
- 监听Activity回调获取验证码
- 验证码的解析与填充
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();
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] smsMessages = new SmsMessage[pdus.length];
for (int i = 0; i < smsMessages.length; i++) {
smsMessages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
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) {
...
}