SMS Retriever API - 如何以编程方式获取 SMS?

Posted

技术标签:

【中文标题】SMS Retriever API - 如何以编程方式获取 SMS?【英文标题】:SMS Retriever API - how to programmatically get SMSs? 【发布时间】:2019-07-26 16:35:20 【问题描述】:

我想在我的 android 项目中实现 sms OTP 接收器,该项目完全使用 java 而不是 kotlin。请问谁能帮我用java语言在android中做这件事?

我在我的 android 项目中尝试了 kotlin 代码,但我的 UI 功能是基于 java 代码的,请帮助我。

【问题讨论】:

您是说 SMS Retirever 吗?请阅读:developers.google.com/identity/sms-retriever/request 是的,但我不知道如何在没有任何 kotlin 代码的纯 java 中实现它 @StanleyKou 分享的链接完全是用java而不是kotlin编写的 【参考方案1】:

尝试在 Java 中使用它

public class SmsBroadcastReceiver extends BroadcastReceiver 

    public static final String SMS_BUNDLE = "pdus";

    public void onReceive(Context context, Intent intent) 
        Bundle intentExtras = intent.getExtras();
        if (intentExtras != null) 
            Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
            String smsMessageStr = "";
            for (int i = 0; i < sms.length; ++i) 
                SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

                String smsBody = smsMessage.getMessageBody().toString();
                String address = smsMessage.getOriginatingAddress();

                smsMessageStr += "SMS From: " + address + "\n";
                smsMessageStr += smsBody + "\n";
            
            Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show();

            //this will update the UI with message
            SmsActivity inst = SmsActivity.instance();
            inst.updateList(smsMessageStr);
        
    

尝试在 Kotlin 中使用类似的东西

class SmsBroadcastReceiver:BroadcastReceiver() 
  fun onReceive(context:Context, intent:Intent) 
    val intentExtras = intent.getExtras()
    if (intentExtras != null)
    
      val sms = intentExtras.get(SMS_BUNDLE) as Array<Any>
      val smsMessageStr = ""
      for (i in sms.indices)
      
        val smsMessage = SmsMessage.createFromPdu(sms[i] as ByteArray)
        val smsBody = smsMessage.getMessageBody().toString()
        val address = smsMessage.getOriginatingAddress()
        smsMessageStr += "SMS From: " + address + "\n"
        smsMessageStr += smsBody + "\n"
      
      Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show()
      //this will update the UI with message
      val inst = SmsActivity.instance()
      inst.updateList(smsMessageStr)
    
  
  companion object 
    val SMS_BUNDLE = "pdus"
  

【讨论】:

以上是关于SMS Retriever API - 如何以编程方式获取 SMS?的主要内容,如果未能解决你的问题,请参考以下文章

SMS Retriever API - 永久监听器

使用 SMS Retriever API Android 的 OTP/SMS 自动获取问题

为啥 SMS Retriever API 在发布模式下不起作用?

如何使用 Google App 签名为 Sms Retriever 生成 11 个字符的哈希密钥

如何在MIUI 8+中获取读取“服务SMS”的权限(以编程方式)

每次获取不同App的Hash String |短信检索 API