0

我无法使用 Android 拨打电话。问题在于我得到的号码在区号周围有括号,即(206) 555 1234。这是我正在使用的代码:

final String phone =  listdata.getPhone();
...
            ImageButton phoneButton = (ImageButton) this.findViewById(R.id.phoneButton);
            phoneButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v)
                {
                    Uri phoneNum = Uri.parse(phone); 
                    Intent phoneIntent = new Intent(Intent.ACTION_CALL, phoneNum);
                    //phoneIntent.setData(); 

                    DetailActivity.this.startActivity(phoneIntent);

                }
            });

这是我得到的错误:

    09-27 10:01:45.771: E/AndroidRuntime(23422): FATAL EXCEPTION: main
09-27 10:01:45.771: E/AndroidRuntime(23422): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CALL dat=(206) 623-1922 }
09-27 10:01:45.771: E/AndroidRuntime(23422):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1512)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1384)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at android.app.Activity.startActivityForResult(Activity.java:3248)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at android.app.Activity.startActivity(Activity.java:3359)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at com.uie.top25.seattle.DetailActivity$2.onClick(DetailActivity.java:94)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at android.view.View.performClick(View.java:3526)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at android.view.View$PerformClick.run(View.java:14133)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at android.os.Handler.handleCallback(Handler.java:605)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at android.os.Handler.dispatchMessage(Handler.java:92)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at android.os.Looper.loop(Looper.java:137)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at android.app.ActivityThread.main(ActivityThread.java:4697)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at java.lang.reflect.Method.invokeNative(Native Method)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at java.lang.reflect.Method.invoke(Method.java:511)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
09-27 10:01:45.771: E/AndroidRuntime(23422):    at dalvik.system.NativeStart.main(Native Method)

除了更改号码来源之外,我能做些什么吗?

4

3 回答 3

2

您必须更改号码来源,因为 ACTION_CALL 意图不理解该号码。所以要么你改变你的号码,要么你可以等到谷歌改变安卓来满足你的需要:-)

于 2012-09-27T18:07:58.577 回答
1

我不确定 Android 在过去 8 个月中是否发生了变化以适应这一点,但问题不在于数字的格式。Android 可以很好地处理括号、空格和破折号。问题是 Uri 中缺少前缀“tel:”。

Uri phoneNum = "tel:" + Uri.parse(phone);
于 2013-06-17T17:49:27.167 回答
1

要小心,否则您将构建一些适用于某些地理区域而不适用于其他地理区域的东西。考虑一下:

  1. 0044(0)123456789。英国国际号码。必须删除零和括号,否则号码将无法拨打。

  2. (0)123456789。英国国家号码。必须删除括号,但不能删除零,否则号码将无法拨打。

  3. (0)123 456789。美国国家号码,但用于本地电话。在某些地区,如果呼叫在同一地区,则必须删除区号。所以有些地区会接受 123456789,而其他地区只会接受 456789。

它还在继续。在某些国家,例如意大利,手机号码特别难以处理。

通过查看E.164规范开始您的研究。

于 2012-09-27T18:48:31.813 回答