拨打GooglePlaces在Android中提供的电话号码

时间:2012-11-09 17:54:01

标签: android android-intent google-places-api

因此,使用谷歌地方参考(详细的网络服务)我检索了一个“格式化的电话号码”,它的形式为(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 )

2 个答案:

答案 0 :(得分:0)

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

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

未测试的文档在这里: replaceAll

Java regular expressions

答案 1 :(得分: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"/>