第三章:交互式通信服务与手机统制(自定义拨打电话)

第三章:交互式通信服务与手机控制(自定义拨打电话)
效果:

第三章:交互式通信服务与手机统制(自定义拨打电话)



第三章:交互式通信服务与手机统制(自定义拨打电话)


main.xml
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>

<EditText
android:id="@+id/edit"
android:layout_width="232px"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_x="30px"
android:layout_y="27px"
>
</EditText>
<Button
android:id="@+id/call"
android:layout_width="157px"
android:layout_height="wrap_content"
android:text="&#25320;&#25171;&#30005;&#35805;"
android:layout_x="54px"
android:layout_y="117px"
>
</Button>
</AbsoluteLayout>




AndroidManifest.xml需要添加权限Android.permission.CALL_PHONE否则点击按钮会报错
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="call.action.text"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".CallActionTest"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
	<!-- 添加拨出电话的权限 -->
	<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
</manifest> 


package call.action.text;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class CallActionTest extends Activity {
	private EditText ed;
	private Button bt;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /**载入main.xml*/
        setContentView(R.layout.main);
        /**通过id找到EditText组件化*/
        ed=(EditText)findViewById(R.id.edit);
        /**通过id找到Button组件化*/
        bt=(Button)findViewById(R.id.call);
        /**设置Button按钮点击事件*/
        bt.setOnClickListener(new Button.OnClickListener(){
        	public void onClick(View v){
        		try {
        			/**获取输入文本框内容*/
					String str = ed.getText().toString();
					/**匹配号码格式是否正确*/
					if (isPhoneNumberValid(str) == true) {
						/**构建一个新的Intent运行action.CALL的常数通过URI将字符串带入*/
						
						/**
						 * 也可以调用虚拟电话拨打电话
						 * Intent myIntentDial = new Intent(
						 * "android.intent.action.DIAL", Uri.parse("tel:"+ ""));
						 * */
						Intent myIntentDial = new Intent(
								"android.intent.action.CALL", Uri.parse("tel:"
										+ str));
						/**带入自定义的Intent对象以运行拨打电话的工作*/
						startActivity(myIntentDial);
						ed.setText("");
					} else {
						ed.setText("");
						/**提示信息*/
						Toast.makeText(CallActionTest.this, "输入的电话格式不正确!",
								Toast.LENGTH_LONG).show();
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
        	}
        });
    }
    
    public boolean isPhoneNumberValid(String str){
    	boolean flg=false;
    	/**
    	 * ^\\(?:可以使用"("作为开头
    	 * (\\d{3}):紧接着三个数字
    	 * \\)?:可以使用")"继续
    	 * [- ]?:接着三个数字
    	 * (\\d{4}$:以四个数字的结束
    	 * 可以比较下列数字格式:
    	 * (123)456-78900,123-4560-7890,12345679800,(123)-4560-7890*/
    	String str1="^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{5})$";
    	String str2="^\\(?(\\d{3})\\)?[- ]?(\\d{4})[- ]?(\\d{4})$";
    	CharSequence input=str;
    	/**创建Pattern带入表达式*/
    	Pattern pattern=Pattern.compile(str1);
    	/**将Pattern以参数的形式传入Matcher*/
    	Matcher matcher=pattern.matcher(input);
    	Pattern pattern2=Pattern.compile(str2);
    	Matcher matcher2=pattern2.matcher(input);
    	if(matcher.matches()||matcher2.matches()){
    		flg=true;
    	}
		return flg;
    }
}