对于从08开始的号码,ACTION_CALL在Nexus / Android 4.3上充当ACTION_DIAL

时间:2013-10-08 10:15:31

标签: android android-intent phone-call

我的应用程序在其布局中使用了一个edittext和按钮

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:inputType="phone" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/editText1"
        android:layout_below="@+id/editText1"
        android:text="Dial" />

</RelativeLayout>

MainActivity扩展Activity并执行

@Override
protected void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  final EditText editText1 = (EditText) findViewById(R.id.editText1);
  Button button1 = (Button) findViewById(R.id.button1);
  button1.setOnClickListener(new OnClickListener()
  {
    @Override
    public void onClick(View v)
    {
      String strNumber = editText1.getText().toString();
      if (!strNumber.equals("")) 
      {
        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + strNumber));
        startActivity(intent);
      }
    }      
  });
}

对于不开始的数字&#39; 08 ...&#39;,它会按预期调用该号码。对于以#08; 08 ...&#39;开头的号码,它会拨打拨号号码来拨打拨号号码。我怎么能阻止这个?它似乎不是手机上的一个设置,至少在我看来并不是这样,但我在4.3模拟器上进行了测试,它按预期工作。我没有另外4.3手机进行测试。我的4.2.2 HTC One按预期拨号,就像我所有的旧测试设备一样。

我可以直接拨打0800号码,或者在应用程序启动拨号器后点击通话按钮,这样他们就不会被完全阻止,我在手机中没有SIM卡就能获得相同的效果,所以那不是。


ETA:我可以通过在&#34;,&#34;前加上08号码来解决这个问题。在拨号之前会导致轻微的暂停但是否则有效。但这并没有真正解释为什么会发生这种情况。

1 个答案:

答案 0 :(得分:2)

我没有4.3手机进行测试。 但是,我查看了OutgoingCallBroadcaster的源代码,其作用描述如下:

  

OutgoingCallBroadcaster接收CALL和CALL_PRIVILEGED意图,并广播ACTION_NEW_OUTGOING_CALL意图,允许其他应用程序监视,重定向或阻止拨出电话。

processIntent(Intent i)方法包含一个片段(在第493行附近),如果将数字视为“潜在紧急情况”,则将意图的操作更改为ACTION_DIAL。

总而言之,Android的策略是使用拨号盘拦截ACTION_CALL。但不太确定为什么会发生这种情况。