我的应用程序在其布局中使用了一个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号码来解决这个问题。在拨号之前会导致轻微的暂停但是否则有效。但这并没有真正解释为什么会发生这种情况。
答案 0 :(得分:2)
我没有4.3手机进行测试。 但是,我查看了OutgoingCallBroadcaster的源代码,其作用描述如下:
OutgoingCallBroadcaster接收CALL和CALL_PRIVILEGED意图,并广播ACTION_NEW_OUTGOING_CALL意图,允许其他应用程序监视,重定向或阻止拨出电话。
其 processIntent(Intent i)方法包含一个片段(在第493行附近),如果将数字视为“潜在紧急情况”,则将意图的操作更改为ACTION_DIAL。
总而言之,Android的策略是使用拨号盘拦截ACTION_CALL。但不太确定为什么会发生这种情况。