zoukankan      html  css  js  c++  java
  • 短信发送接收装置

    接到Boss的命令,要求我们做一个在Android手机上运行的小的例子,实现的功能是:通过一个手机向另外一个手机发送数据,另外一个Android手机接收到后通过USB接口输出!

    该装置主要由三个步骤组成:

    1、发信息

    2、接收信息并读取信息内容

    3、从 USB 口输出(这里暂时没实现)

    就是为了实现一个短信发送,并接收短信内容输出的装置

    MainActivity.java 类实现的是发送信息的功能

     1 package com.example.android_phone;
     2 
     3 import java.util.ArrayList;
     4 
     5 import android.app.Activity;
     6 import android.os.Bundle;
     7 import android.telephony.SmsManager;
     8 import android.view.Menu;
     9 import android.view.View;
    10 import android.view.View.OnClickListener;
    11 import android.widget.Button;
    12 import android.widget.Toast;
    13 
    14 public class MainActivity extends Activity {
    15     private Button mButton;
    16     private String mContent;
    17     private String mPhoneNumber;
    18 
    19     @Override
    20     protected void onCreate(Bundle savedInstanceState) {
    21         super.onCreate(savedInstanceState);
    22         setContentView(R.layout.activity_main);
    23         mButton = (Button) this.findViewById(R.id.button1);
    24         mContent = "短信内容";
    25         mPhoneNumber = "1833607****";
    26         mButton.setOnClickListener(new OnClickListener() {
    27             @Override
    28             public void onClick(View v) {
    29                 // TODO Auto-generated method stub
    30                 send(mPhoneNumber,mContent);
    31             }
    32         });
    33     }
    34     
    35     private void send(String phoneNumber, String content){
    36         SmsManager smsManager =SmsManager.getDefault();
    37         ArrayList<String> texts = smsManager.divideMessage(content);
    38         for(String text : texts){    
    39             smsManager.sendTextMessage(phoneNumber, null, text, null, null);
    40         }
    41         Toast.makeText(getApplicationContext(), "---发送成功---", Toast.LENGTH_LONG).show();
    42     }
    43     
    44 }

    SMSBroadcastReceiver.java 类实现对广播的监听,并读取短信的内容

     1 package com.example.android_phone;
     2 
     3 import java.text.SimpleDateFormat;
     4 import java.util.Date;
     5 
     6 import android.content.BroadcastReceiver;
     7 import android.content.Context;
     8 import android.content.Intent;
     9 import android.os.Bundle;
    10 import android.telephony.SmsMessage;
    11 import android.widget.Toast;
    12 
    13 public class SMSBroadcastReceiver extends BroadcastReceiver{
    14 
    15     //信息接收广播
    16     private static final Object ACTION = "android.provider.Telephony.SMS_RECEIVED";
    17     private String sender;
    18     private String content;
    19     private String sendtime;
    20     @Override
    21     public void onReceive(Context context, Intent intent) {
    22         // TODO Auto-generated method stub
    23         if (intent.getAction().equals(ACTION)) { 
    24             StringBuffer SMSAddress = new StringBuffer(); 
    25             StringBuffer SMSContent = new StringBuffer(); 
    26             Bundle bundle = intent.getExtras(); 
    27             if (bundle != null) { 
    28                 // 通过pdus获得接收到的所有短信消息,获取短信内容;
    29                 Object[] pdusObjects = (Object[]) bundle.get("pdus"); 
    30                 // 构建短信对象数组;
    31                 SmsMessage[] messages = new SmsMessage[pdusObjects.length]; 
    32                 for (int i = 0; i < pdusObjects.length; i++) { 
    33                     // 获取单条短信内容,以pdu格式存,并生成短信对象;
    34                     messages[i] = SmsMessage 
    35                             .createFromPdu((byte[]) pdusObjects[i]); 
    36                 } 
    37                 for (SmsMessage message : messages) { 
    38                     SMSAddress.append(message.getDisplayOriginatingAddress()); 
    39                     SMSContent.append(message.getDisplayMessageBody()); 
    40                     
    41                     
    42                     SMSAddress.append("短信来自:" + message.getDisplayOriginatingAddress()
    43                             + "
    ");
    44                     SMSContent.append("短信内容:" + message.getMessageBody());
    45 
    46                     sender = message.getDisplayOriginatingAddress();// 获取短信的发送者
    47                     content = message.getMessageBody();// 获取短信的内容
    48                     Date date = new Date(message.getTimestampMillis());
    49                     SimpleDateFormat format = new SimpleDateFormat(
    50                             "yyyy-MM-dd HH:mm:ss");
    51                     sendtime = format.format(date);// 获取短信发送时间;
    52                     // SmsManager manager = SmsManager.getDefault();
    53                     // manager.sendTextMessage("5556",
    54                     // null,"发送人:"+sender+"-----发送时间:"+sendtime+"----内容:"+content,
    55                     // null, null);//把拦截到的短信发送到指定的手机,此处为5556;
    56                     // if ("5556".equals(sender)){
    57                     // //屏蔽手机号为5556的短信,这里还可以时行一些处理,如把该信息发送到第三人的手机等等。
    58                     // abortBroadcast();
    59                     // }
    60                     Toast.makeText(context, "短信内容:"+content, Toast.LENGTH_LONG).show(); 
    61                 } 
    62                 
    63             } 
    64         } 
    65     }
    66 
    67 }

    权限设置

     1    <!-- 发送短信 -->
     2     <uses-permission android:name="android.permission.SEND_SMS"/>
     3     <!-- 接收短信 -->
     4     <uses-permission android:name="android.permission.RECEIVE_SMS"/>
     5     <!-- 读取短信内容 -->
     6     <uses-permission android:name="android.permission.READ_SMS"/>
     7     <!-- 收到短信时广播 -->
     8     <uses-permission android:name="android.permission.BROADCAST_SMS"/>
     9     <!-- 编写短信-->
    10     <uses-permission android:name="android.permission.WRITE_SMS"/>
    11     

    广播监听

    1     <receiver android:name=".SMSBroadcastReceiver">  
    2            <intent-filter android:priority="800">  
    3                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
    4             </intent-filter>  
    5         </receiver> 

    ---------------------------------------未完待续---------------------------------------

  • 相关阅读:
    MYSQL 神奇的操作insert into test select * from test;
    mysql排序字段为空的排在最后面
    Redis有效时间设置及时间过期处理
    Dom4j 使用简介
    ASP.NET中使用多个runat=server form(转)
    谨以此文献给才毕业25年的朋友(转)
    门户网站
    庄思浩和BEA公司
    是什么限制了我们面向对象(的开发) (转)
    模态窗口和非模态窗口
  • 原文地址:https://www.cnblogs.com/zhjsll/p/3861532.html
Copyright © 2011-2022 走看看