2012-09-27 61 views
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) 

有什么我可以做的,总之换号源?

+0

变化数源。括号只是区域代码(在美国)为人们的分隔符。 –

+0

就像我在我的OP中所说的,我不想更改数字源。 – BlackHatSamurai

+1

您必须更改数字源,因为ACTION_CALL意图不能理解数字。因此,无论您是更改号码,还是可以等到Google更改Android以符合您的需求:-) – Ridcully

回答

2

您必须更改数字源,因为ACTION_CALL意图不能理解数字。因此,无论你改变你的电话号码,或者你可以等到谷歌Android的改变,以适应您的需求:-)

1

要小心,否则你会建立的东西,会为某些地区,而不是别人的工作。考虑这个:

  1. 0044(0)123456789。英国国际号码。零和括号必须删除或号码不会拨号。

  2. (0)123456789。英国国家号码。括号,但不是零,必须删除或号码不会拨。

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

然后继续。移动号码在一些国家特别难以处理,例如,意大利。

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

0

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

Uri phoneNum = "tel:" + Uri.parse(phone);