Android 自动获取otp kotlin以实现sms读取
朋友们, 我正在处理Android 自动获取otp kotlin以实现sms读取,android,kotlin,broadcastreceiver,sms,smsmanager,Android,Kotlin,Broadcastreceiver,Sms,Smsmanager,朋友们, 我正在处理Kotlin并试图在编辑文本中获取收到的SMS。我不知道如何实现它。如果任何人有正确的Kotlin代码来获取OTP请在下面发布,但是我刚刚按照下面的方式实现并在实现中堆叠,因此如果任何人有Kotlin代码,请在下面发布 class SmsReceiver: BroadcastReceiver() { private val mListener: SmsListener? = null var b: Boolean? = null var abcd:
Kotlin
并试图在编辑文本中获取收到的SMS
。我不知道如何实现它。如果任何人有正确的Kotlin
代码来获取OTP
请在下面发布,但是我刚刚按照下面的方式实现并在实现中堆叠,因此如果任何人有Kotlin
代码,请在下面发布
class SmsReceiver: BroadcastReceiver() {
private val mListener: SmsListener? = null
var b: Boolean? = null
var abcd: String? = null
var xyz:String? = null
@Suppress("DEPRECATION")
override fun onReceive(context: Context?, intent: Intent?) {
//val bundle = intent!!.getExtras()
val data = intent!!.extras
val pdus = data.get("pdus") as Array<Any>
}
}
这可以通过RxJava实现:
public static Observable<String> createMessageMonitor(@NonNull final Context context) {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
return fromIntentFilter(context, intentFilter)
.filter(intent -> intent != null && intent.getExtras() != null)
.map(intent -> {
Bundle bundle = intent.getExtras();
Object[] pdu_Objects = (Object[]) bundle.get("pdus");
if (pdu_Objects != null) {
for (Object aObject : pdu_Objects) {
final SmsMessage currentSMS = getIncomingMessage(aObject, bundle);
final String senderNumber = currentSMS.getDisplayOriginatingAddress();
final String message = currentSMS.getDisplayMessageBody().trim();
Matcher matcher = OTP_PATTERN.matcher(message);
if (matcher.matches()) {
return matcher.group(1);
}
}
}
return "";
}).filter(message -> !message.isEmpty());
}
然后订阅流:
RxBroadcastReceivers2.createMessageMonitor(this)
.subscribeWith(this,
onNext = { /*Your OTP is here*/ },
onError = {
Timber.e(it, "Registration permission request failed")
}
)
注意:在使用
createMessageMonitor
方法之前,您需要获得清单.权限。阅读\u SMS
。如果您不想编写接收器,可以使用简单的轻量级库
该库与Kotlin具有100%的兼容性
您只需要重写接口方法,创建一个拦截器类并将其与生命周期绑定。看起来是这样的:
public class AuthActivity extends AppCompatActivity implements OnMessageListener {
private SmsInterceptor smsInterceptor;
private EditText etAuthPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auth);
initViews();
initSmsInterceptor();
}
@Override
protected void onResume() {
super.onResume();
smsInterceptor.register();
}
@Override
protected void onPause() {
super.onPause();
smsInterceptor.unregister();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
smsInterceptor.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
public void messageReceived(String message) {
// You can perform your validation here
etAuthPassword.setText(message);
}
private void initViews() {
etAuthPassword = findViewById(R.id.etAuthPassword);
etAuthPassword.addTextChangedListener(new SmsTextWatcher() {
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() == 4) {
btnAuthPassword.setEnabled(true);
checkCode();
} else {
btnAuthPassword.setEnabled(false);
}
}
});
}
private void initSmsInterceptor() {
smsInterceptor = new SmsInterceptor(this, this);
// Not necessary
smsInterceptor.setRegex(SMS_CODE_REGEX);
smsInterceptor.setPhoneNumber(PHONE_NUMBER);
}
private void checkCode() {
// Validation
if (isValid) {
navigateToMainScreen();
}
}
}
RxBroadcastReceivers2.createMessageMonitor(this)
.subscribeWith(this,
onNext = { /*Your OTP is here*/ },
onError = {
Timber.e(it, "Registration permission request failed")
}
)
public class AuthActivity extends AppCompatActivity implements OnMessageListener {
private SmsInterceptor smsInterceptor;
private EditText etAuthPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auth);
initViews();
initSmsInterceptor();
}
@Override
protected void onResume() {
super.onResume();
smsInterceptor.register();
}
@Override
protected void onPause() {
super.onPause();
smsInterceptor.unregister();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
smsInterceptor.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
public void messageReceived(String message) {
// You can perform your validation here
etAuthPassword.setText(message);
}
private void initViews() {
etAuthPassword = findViewById(R.id.etAuthPassword);
etAuthPassword.addTextChangedListener(new SmsTextWatcher() {
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() == 4) {
btnAuthPassword.setEnabled(true);
checkCode();
} else {
btnAuthPassword.setEnabled(false);
}
}
});
}
private void initSmsInterceptor() {
smsInterceptor = new SmsInterceptor(this, this);
// Not necessary
smsInterceptor.setRegex(SMS_CODE_REGEX);
smsInterceptor.setPhoneNumber(PHONE_NUMBER);
}
private void checkCode() {
// Validation
if (isValid) {
navigateToMainScreen();
}
}
}