Android实现打电话,发短信

版权声明:虽然我很菜,但我在努力! https://blog.csdn.net/qq_39331713/article/details/82907638

打电话和发短信 

功能描述:

        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"/>

到这代码就结束了。

     功能演示截图:

                点击调出拨号界面:

                              

                长按直接拨号:

                                 

                点击打开短信编辑页面:

                                   

                长按直接发送短信:

                                              

总结:

/**
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/课程学习资料总结

猜你喜欢

转载自blog.csdn.net/qq_39331713/article/details/82907638