0

因此,使用谷歌地点参考(详细的网络服务)我检索了一个“格式化的电话号码”,其格式为(256)922-0556。目标是拨打这个号码。我正在尝试的方式是使用意图。但是,上面的数字并不是一个使用 Uri 解析方法的格式。有人知道拨打此号码的解决方案吗?是否有不同的意图或好方法将其转换为 Uri 数据?我见过与此相反的做法:1234567890 → (123) 456-7890

  String formattedNumber = PhoneNumberUtils.formatNumber(unformattedNumber);

但我想做相反的事情。任何想法或替代解决方案?这是我的代码:

protected void onPostExecute(Boolean result){
                Intent callintent = new Intent(Intent.ACTION_CALL);
                callintent.setData(Uri.parse(phoneNum));
                try {
                    startActivity(callintent);
                }catch (Exception e) {e.printStackTrace();}
            }

其中 phoneNum 是通过 JSON 从 GooglePlaces 检索到的格式化电话号码字符串

扩展 Peotropo 的评论:有没有比以下更好的方法来替换值?

phoneNum = phoneNum.replace(" ", ""); // gets rid of the spaces
phoneNum = phoneNum.replace("-", ""); // gets rid of the -
phoneNum = phoneNum.replace("(", ""); // gets rid of the (
phoneNum = phoneNum.replace(")", ""); // gets rid of the )
4

2 回答 2

1

这是简单的字符串。使用 String.replace() 方法删除多余的字符。您还可以使用 replaceAll 方法:

String phoneNumber = "(123)123-456465"
return phoneNumber.replaceAll("[^0-9]", "");

未测试的文档在这里: replaceAll

Java 正则表达式

于 2012-11-09T18:35:48.047 回答
0

您不需要进行字符串替换。您可以使用下面的 Spannable 代码让您的手机自动识别并拨打该号码。它会针对括号、空格和破折号进行调整。

 // call the phone
 SpannableString callphone = new SpannableString("Phone: " + phone);
 callphone.setSpan(new StyleSpan(Typeface.BOLD), 0, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 callphone.setSpan(new URLSpan("tel:"+phone), 7, 21, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 TextView zphone = (TextView) findViewById(R.id.phone);
 zphone.setText(callphone);
 zphone.setMovementMethod(LinkMovementMethod.getInstance());

它会显示

 Phone: (123) 456-7890

您在上面的代码中看到 7,21 表示从第 8 个字符开始,即 ( 并在第 21 个字符结束,即电话号码中的最后一个数字。调整它以显示您想要的方式。没什么特别的在你看来要做:

 <!-- Phone Number Label -->
 <TextView
    android:id="@+id/phone"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dip"/>
于 2012-11-12T04:24:18.633 回答