1. 程式人生 > >Android呼叫系統的打電話和發簡訊功能

Android呼叫系統的打電話和發簡訊功能

一、打電話

     1、新增打電話的許可權在manifast檔案中。

           <uses-permission android:name="android.permission.CALL_PHONE"/>

     2、使用Uri.parse(String a)建立Uri。

           Uri uri = Uri.parse("tel:"+1008611);

     3、建立打電話的意圖。

          Intent intent = new Intent(Intent.ACTION_CALL, uri);

     4、啟動系統打電話頁面。

          startActivity(intent);

二、發簡訊

    方式一:直接傳送簡訊

    1、添加發送簡訊的許可權在manifast檔案中。

         <uses-permission android:name="android.permission.SEND_SMS"/>

    2、獲取android.telephony.SmsManager物件(PS:android.telephony.gsm.SmsManager已經廢棄)。

        SmsManager smsManager = SmsManager.getDefault();

    3、宣告一個簡訊內容的常量。

       String content = "Hello World!";

    4、將簡訊內容分塊,傳送一條簡訊最多能夠傳送70箇中文字元,超過這個值系統會將簡訊內容分為多塊進行傳送。

        ArrayList<String> list = smsManager.divideMessage(content);

    5、分條進行傳送。

       for (int i = 0; i < list.size(); i++) {
                smsManager.sendTextMessage("10086", null, list.get(i), null, null);
            }

    方式二:呼叫系統的傳送簡訊的介面,需要輸入號碼

     1、建立意圖

    Intent intentFinalMessage = new Intent(Intent.ACTION_VIEW);

    2、設定型別

    intentFinalMessage.setType("vnd.android-dir/mms-sms");
      3、開啟系統簡訊介面

     startActivity(intentFinalMessage); 

     方式三:呼叫系統的傳送簡訊的介面,不需要輸入號碼

     1、建立Uri,設定行為和號碼

     Uri uri2 = Uri.parse("smsto:"+10086);

     2、建立意圖。     

     Intent intentMessage = new Intent(Intent.ACTION_VIEW,uri2);
    3、開啟系統簡訊介面,號碼已經填寫,只需填寫要傳送   

        startActivity(intentMessage); 

      1、destinationAddress:給這個號碼傳送簡訊。

      2、scAddress:使用這個號碼傳送簡訊,為null時表示使用本機發送。

      3、text:簡訊內容。

      4、sentIntent:傳送簡訊成功或失敗之後傳送廣播。

      5、deliveryIntent:對方接受到簡訊之後傳送廣播。

四、傳送廣播的簡訊傳送

      1、註冊廣播

            註冊自己傳送簡訊的廣播:

            SEND_SMS_ACTION = "3";
        registerReceiver(new BroadcastReceiver(){

            @Override
            public void onReceive(Context context, Intent intent) {
                //根據結果碼判斷是否傳送成功
                if(Activity.RESULT_OK == getResultCode()){
                    Toast.makeText(MainActivity.this, "傳送成功", Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(MainActivity.this, "傳送失敗", Toast.LENGTH_SHORT).show();
                }
            }
            
        }, new IntentFilter(SEND_SMS_ACTION));

         註冊對方接受到簡訊的廣播:

         BACK_SMS_ACTION = "4";
        registerReceiver(new BroadcastReceiver(){

            @Override
            public void onReceive(Context context, Intent intent) {
                //只要接收到這個廣播,表示接收簡訊成功
                Toast.makeText(MainActivity.this, "對方接收到簡訊", Toast.LENGTH_SHORT).show();
            }
            
        }, new IntentFilter(BACK_SMS_ACTION));

        2、傳送 簡訊,監聽傳送情況、監聽對方接受情況,如果簡訊傳送成功或失敗

            PendingIntent.getBroadcast(MainActivity.this, 0, new Intent(SEND_SMS_ACTION), 0)會發送廣播,

            如果對方接受到簡訊

           PendingIntent.getBroadcast(MainActivity.this, 0, new Intent(BACK_SMS_ACTION), 0));會發送廣播

          for (int i = 0; i < list.size(); i++) {
                smsManager.sendTextMessage("10086", null, list.get(i),
                        PendingIntent.getBroadcast(MainActivity.this, 0, new Intent(SEND_SMS_ACTION), 0),
                        PendingIntent.getBroadcast(MainActivity.this, 0, new Intent(BACK_SMS_ACTION), 0));
           }

五、使用smsManager傳送其它格式的簡訊

  deliveryIntent)

  其它引數一樣,第三個引數short destinationPort,給這個號碼的這個埠號傳送這條簡訊,簡訊內容為位元組陣列格式。

  給這個號碼傳送多條簡訊。