Intent to Dial Pad 和 SMS APP 正在加载错误的号码

Posted

技术标签:

【中文标题】Intent to Dial Pad 和 SMS APP 正在加载错误的号码【英文标题】:Intent to Dial Pad and SMS APP are loading the wrong numbers 【发布时间】:2019-02-05 17:01:17 【问题描述】:

我正在构建一个屏幕,显示来自全球特定国家/地区的紧急服务,他们的号码通常不是 10 位数长, 例如:Australia = 13 11 14UK plus ROI = 116 123

我希望用户单击这些数字并被带到拨号盘,而不管他们的语言环境如何。 这是我到目前为止所拥有的:

fun openDialApp(phoneNumber: String) 
        val dialIntent = Intent(Intent.ACTION_DIAL)
        dialIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        dialIntent.data = Uri.parse("tel:" + Uri.encode(phoneNumber))
        startActivity(context, dialIntent, Bundle.EMPTY)
    

此代码确实将用户带到了拨号盘,但它输入了一个完全不同的数字。在进行了更多调试之后,似乎有一些东西将数字从字符串字面意义更改为其他随机生成的数字。有什么想法吗?

当我尝试通过 American helpline number = 741741 将用户发送到他们的 SMS 应用程序时,也会发生同样的问题。代码如下

fun openSmsApp(smsNumber: String) 
        val smsIntent = Intent(Intent.ACTION_SENDTO)
        smsIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        smsIntent.data = Uri.parse("smsto:" + Uri.encode(smsNumber))
        startActivity(context, smsIntent, Bundle.EMPTY)
    

【问题讨论】:

phoneNumber 的实际值是多少?因为它预计将是美国的“tel:911”之类的最终 uri - 不允许使用空格。 我用的是模拟器,所以没有电话号码。但是,我确实看到了一个重复出现的号码:(213) 182-0877 我认为这可能是在模拟器上使用的默认号码,也许有人可以对此有所了解 我的意思是传递给 openDialApp 函数的变量 phoneNumber。要使函数正常工作,它只需要 0-9 并且可能是前导 +,它不能有 ()- 或空格 这在大多数情况下都有效,但是,短信仍然不断加载错误的号码 【参考方案1】:

我发现问题在于我得到的是 id 而不是实际数字:

这是之前的代码:

private fun bindViews() 
        header.leftIconView.clicks().bindToWithDispose(disposables) 
            viewModel.goBack()
        

        lifelineAustraliaNumber.clicks().bindToWithDispose(disposables) 
            viewModel.openDialApp(R.string.lifeline_australia_number.toString())
        
        mentalHealthAmericaTextNumber.clicks().bindToWithDispose(disposables) 
            viewModel.openSmsApp(R.string.mental_health_america_text_number.toString())
        

        samaritansNumber.clicks().bindToWithDispose(disposables) 
            viewModel.openDialApp(R.string.samaritans_number.toString())
        

    

下面是后面的代码:

 private fun bindViews() 
        header.leftIconView.clicks().bindToWithDispose(disposables) 
            viewModel.goBack()
        

        lifelineAustraliaNumber.clicks().bindToWithDispose(disposables) 
            viewModel.openDialApp(context.resources.getString(R.string.lifeline_australia_number))
        
        mentalHealthAmericaTextNumber.clicks().bindToWithDispose(disposables) 
            viewModel.openSmsApp(context.resources.getString(R.string.mental_health_america_text_number))
        

        samaritansNumber.clicks().bindToWithDispose(disposables) 
            viewModel.openDialApp(context.resources.getString(R.string.samaritans_number))
        

    

希望这对某人有所帮助

【讨论】:

以上是关于Intent to Dial Pad 和 SMS APP 正在加载错误的号码的主要内容,如果未能解决你的问题,请参考以下文章

Android Intent通讯实例

android Intent

Intent 使用方法全面总结

Android点击按钮拨打电话

怎么获取android系统服务,如Uri,intent参数等,或者说去哪里查看

安装k8s出现 Failed to list *api.Node: Get http://192.168.144.131:8080...: dial tcp 192.168.144.131:8080