华为短信检索器 api 不工作,华为设备

问题描述

我正在尝试在华为设备中检索 OTP。但它不起作用。

我已经在华为开发者控制台中创建了具有所有要求的应用程序。

下面是我用来检索短信的代码

private fun initSmsManager() {

        val task = ReadSmsManager.start(this@MainActivity)

        task.addOnCompleteListener {

            if (task.isSuccessful) {
                // The service is enabled successfully. Continue with the process.
                Toast.makeText(this,"ReadSms service has been enabled.",Toast.LENGTH_LONG).show()
            } else
                Toast.makeText(this,"The service Failed to be enabled.",Toast.LENGTH_LONG).show()
        }
        task.addOnSuccessListener(this,OnSuccessListener {
                if(task.isSuccessful){
                    Toast.makeText(this,Toast.LENGTH_LONG).show()
                    myReceiver = MybroadcastReceiver();
                    val intentFilter = IntentFilter(READ_SMS_broADCAST_ACTION)
                    registerReceiver(myReceiver,intentFilter)
                }
        })
        task.addOnFailureListener(this,OnFailureListener {
            Toast.makeText(this,it.message,Toast.LENGTH_SHORT).show();
        })
    }

广播接收器

class MybroadcastReceiver : broadcastReceiver() {

    companion object {
        val TAG = MybroadcastReceiver::class.java.simpleName
    }

    override fun onReceive(context: Context?,intent: Intent?) {

        val bundle = intent!!.extras
        if (bundle != null) {
            val status: Status? = bundle.getParcelable(ReadSmsConstant.EXTRA_STATUS)
            if (status?.statusCode == CommonStatusCodes.TIMEOUT) {

                // Service has timed out and no SMS message that meets the requirement is read. Service ended.
                // doSomethingWhenTimeOut()
            } else if (status?.statusCode == CommonStatusCodes.SUCCESS) {

                if (bundle.containsKey(ReadSmsConstant.EXTRA_SMS_MESSAGE)) {

                    // An SMS message that meets the requirement is read. Service ended.
                    //doSomethingWhenGetMessage(bundle.getString(ReadSmsConstant.EXTRA_SMS_MESSAGE))

                    bundle.getString(ReadSmsConstant.EXTRA_SMS_MESSAGE)?.let {

                        Log.d(TAG,it)

                        val local = Intent()
                        local.action = "service.to.activity.transfer"
                        local.putExtra("sms",it)
                        context!!.sendbroadcast(local)
                    }
                }
            }
        }
    }
}

这方面的任何帮助都是有益的。

解决方法

请确认以下几点:

  1. 检查是否开启了接收短信验证码的广播。您可以通过执行断点调试或记录日志来做到这一点。
  2. 检查短信格式是否符合自动阅读短信的规则。

有关详细信息,请参阅Docs

enter image description here

检查 hash_value 字段是否正确。

  1. 如果在前面的检查过程中没有发生错误,请您提供完整的日志跟踪,然后我将尝试找出此问题可能存在的问题。 :)
,

所有代码都运行良好,当我构建发布的 apk 时,它在调试模式下运行良好,然后密钥库更改了发布模式的哈希更改。如果您知道如何在发布模式下运行,请告诉我们。可能是华为开发者账号发生了一些变化

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...