打电话和发短信 

功能描述:

        1). 点击”打电话”: 进入拨号界面
        2). 长按”打电话”: 直接拨打电话
        3). 点击”发短信”: 进入编辑短信界面
        4). 长按”发短信”: 直接将短信发送出去

     页面布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
 
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="电话号码: " />
 
        <EditText
            android:id="@+id/et_main_number"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="请输入号码">
        </EditText>
    </LinearLayout>
     
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
 
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="短信内容: " />
 
        <EditText
            android:id="@+id/et_main_sms"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="请输入短信">
        </EditText>
    </LinearLayout>
     
     
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
 
        <Button
            android:id="@+id/btn_main_call"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="打电话" />
 
        <Button
            android:id="@+id/btn_main_send"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="发短信" />
 
    </LinearLayout>
 
</LinearLayout>

     JAVA实现代码: 

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity implements OnLongClickListener {
 
    private EditText et_main_number;
    private EditText et_main_sms;
    private Button btn_main_call;
    private Button btn_main_send;
    private OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(v==btn_main_call) {//点击打电话
                //Toast.makeText(MainActivity.this, "点击打电话", 0).show();
                 
                //1). 创建一个Intent(隐式)
                //08-28 03:27:09.976: I/ActivityManager(1222): Displayed com.android.dialer/.DialtactsActivity: +535ms
                String action = "android.intent.action.DIAL";
                action = Intent.ACTION_DIAL;//一样的
                Intent intent = new Intent(action);
                //2). 携带数据
                String number = et_main_number.getText().toString();
                intent.setData(Uri.parse("tel:"+number)); //<data android:scheme="tel" />
                //3). startActivity(intent)
                startActivity(intent);
            }else if(v==btn_main_send) {//点击发短信
                Toast.makeText(MainActivity.this, "点击发短信", 0).show();
                //1). 创建一个Intent(隐式)
                //08-28 04:00:02.420: I/ActivityManager(1222): Displayed com.android.mms/.ui.ComposeMessageActivity: +132ms
                Intent intent = new Intent(Intent.ACTION_SENDTO);//android.intent.action.SENDTO
                //2). 携带数据(号码/内容)
                String number = et_main_number.getText().toString();
                String sms = et_main_sms.getText().toString();
                intent.setData(Uri.parse("smsto:"+number));
                //携带额外数据
                intent.putExtra("sms_body", sms);
                //3). startActivity(intent)
                startActivity(intent);
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        //初始化视图对象
        et_main_number = (EditText) findViewById(R.id.et_main_number);
        et_main_sms = (EditText) findViewById(R.id.et_main_sms);
        btn_main_call = (Button) findViewById(R.id.btn_main_call);
        btn_main_send = (Button) findViewById(R.id.btn_main_send);
        //给视图对象设置点击监听
        btn_main_call.setOnClickListener(onClickListener);
        btn_main_send.setOnClickListener(onClickListener);
        //给视图对象设置长按监听
        btn_main_call.setOnLongClickListener(this);
        btn_main_send.setOnLongClickListener(this);
    }
     
    @Override
    public boolean onLongClick(View v) {
        if(v==btn_main_call) {//长按打电话
            //Toast.makeText(MainActivity.this, "长按打电话", 0).show();
            //1). 创建一个Intent(隐式)
            //08-28 03:38:59.717: I/ActivityManager(1222): Displayed com.android.phone/.PrivilegedOutgoingCallBroadcaster: +570ms
            Intent intent = new Intent(Intent.ACTION_CALL);//android.intent.action.CALL
            //2). 携带数据
            String number = et_main_number.getText().toString();
            intent.setData(Uri.parse("tel:"+number));
            //3). startActivity(intent)
            startActivity(intent);
             
        }else if(v==btn_main_send) {//长按发短信
            Toast.makeText(MainActivity.this, "长按发短信", 0).show();
             
            //1). 得到SmsManager的对象
            SmsManager smsManager = SmsManager.getDefault();
            //2). 发送文本信息(短信)
            String number = et_main_number.getText().toString();
            String sms = et_main_sms.getText().toString();
            smsManager.sendTextMessage(number, null, sms, null, null);
        }
        return true;//不会再触发点击事件(表示此事件已经被消费了)
    }
}

 部分参数说明:

进入电话拨打界面的意图: Intent.ACTION_DIAL

进入短信编辑界面的意图: Intent.ACTION_SENDTO

拨打电话的意图: Intent.ACTION_CALL

发送短信的工具类: SmsManager

需要的权限:

打电话的权限: android.permission.CALL_PHONE

发短信的权限: android.permission.SEND_SMS

拨打电话的Uri: tel:110

进入短信界面的电话Uri : smsto:110

携带额外短信数据的标识名为: sms_body

最后加上对应的权限

<!-- 打电话的权限 -->
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <!-- 发短信的权限 -->
    <uses-permission android:name="android.permission.SEND_SMS"/>

到这代码就结束了。

     功能演示截图:

                点击调出拨号界面:

                

android发送即显短信 安卓发送短信的页面_打电话

              

android发送即显短信 安卓发送短信的页面_发短信_02

                长按直接拨号:

                

android发送即显短信 安卓发送短信的页面_Android_03

                 

android发送即显短信 安卓发送短信的页面_Intent_04

                点击打开短信编辑页面:

               

android发送即显短信 安卓发送短信的页面_打电话_05

                    

android发送即显短信 安卓发送短信的页面_android发送即显短信_06

                长按直接发送短信:

               

android发送即显短信 安卓发送短信的页面_发短信_07

                               

android发送即显短信 安卓发送短信的页面_打电话_08

总结:

/**
1. 界面布局
    1). 分析: 垂直的LinearLayout--->水平的LinearLayout
    2). 编码
2. 在Activity中初始化需要操作的视图对象
3. 给button设置点击监听
4. 给button设置长按监听
5. 点击打电话进入拨号界面
    1). 创建一个Intent(隐式)
    2). 携带数据
    3). startActivity(intent)
     
6. 长按打电话进入打电话的界面
    1). 创建一个Intent(隐式)
    2). 携带数据
    3). startActivity(intent)
     
7. 点击发短信进入短信编辑界面
    1). 创建一个Intent(隐式)
    2). 携带数据(号码/内容)
    3). startActivity(intent)
     
8. 长按发短信直接发短信
    1). 得到SmsManager的对象
    2). 发送文本信息(短信)
*/

 

 注:此文章来自尚硅谷http://www.atguigu.com/课程学习资料总结