1. 程式人生 > >Android實現打電話,發簡訊

Android實現打電話,發簡訊

打電話和發簡訊 

功能描述:

        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/課程學習資料總結