短信发送接收装置

接到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                             + "\n");
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> 

 

 

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

转载于:https://www.cnblogs.com/zhjsll/p/3861532.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MFC遍历指定目录下的所有文件/文件夹(不遍历子目录)

新建一个C控制台程序&#xff0c;增加对MFC的应用。源代码如下&#xff1a; // TraverseDir.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <afx.h>#include <iostream>#include <WinBase.h>using namespace std;int _tmain(i…

Vue之实例的生命周期

Vue实例有一个完整的生命周期&#xff0c;也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程&#xff0c;我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程&#xff0c;就是生命周期 在Vue的整个生命周期中&#xff0c;它提…

十五步骤手把手学会制作网吧XP母盘制作

中国网吧在线 -> 网吧大学 - 技术学院 - 网管技术 - 正文 十五步骤手把手学会制作网吧XP母盘制作 2008-4-9 12:35:05 来源: 中国网吧在线 编辑&#xff1a;陈峰 [网友评论] 第1页&#xff1a;十五步骤手把手学会网吧XP母盘制作第2页&#xff1a;十五步骤手把手学会网吧XP母…

jqury关于cooke的操作写入cookie后只显示一次的DIV提示框代码

有时候当用户登录系统后&#xff0c;需要给用户弹出提示框&#xff0c;但是不需要总是弹出来&#xff0c;在这里加入访问cookie来判断是否弹出过提示框&#xff0c;如果弹出过那么保存cookie&#xff0c;下次根据cookie是否存在来判断是否弹出 <script type"text/javas…

windows遍历目录下所有文件

From: http://blog.csdn.net/benbon/article/details/1911230 在windows中遍历目录下的所有文件主要是使用FindFirstFile和FindNextFile通过递归调用实现的,类似于Linux的opendir和readdir。 在MSDN中&#xff0c;FindFirstFile的声明如下&#xff1a; HANDLE FindFirstFile( …

Vue之计算属性Computed

计算属性将被添加到Vue的实例中。计算属性内部的getter和setter函数内的this上下文将自动地绑定为Vue实例 不应该使用箭头函数来定义计算属性函数 (例如 aDouble: () > this.a * 2)。理由是箭头函数绑定了父级作用域的上下文&#xff0c;所以 this 将不会按照期望指向 Vue …

虚拟机几种网络连接方式的区别

虚拟机&#xff0c;不论是VirtualBox还是VMWare&#xff0c;都提供了几种网络连接方式&#xff0c;其中包括了桥接(Bridged)、网络地址翻译(NAT)和主机模式(Host-only)。 桥接(Bridged)相当于在主机所在的局域网中增加了一台机器&#xff0c;主机和虚拟机的IP地址都是主机所在的…

使用AIR运行另外的程序。

NavigateToURL方法.<?xml version"1.0" encoding"utf-8"?><mx:WindowedApplication xmlns:mx"http://www.adobe.com/2006/mxml"layout"absolute"><mx:Script><![CDATA[import flash.net.URLRequest; pu…

ftw遍历目录树

表头文件&#xff1a;#include <ftw.h>定义函数&#xff1a;int ftw(const char *dir, int (*fn) (const *file, const struct stat *sb, int flag), int depth)函数说明&#xff1a;ftw() 会从参数dir指定的 目录开始&#xff0c;往下一层层地递归式遍历子 目录。ftw()…

关于用display:table让元素居中的小结

让元素垂直居中有一种简单的方法:给需要居中的元素用一个父级包起来&#xff0c;并给父元素添加样式’display&#xff1a;table’,同时给这个父级设置好高度,再给需要居中的元素一个display&#xff1a;table-cell,vertical-align:middle;这样被设置的元素就可以做到垂直居中 …

谷歌联合 Adobe 发布 Noto 字体【免费下载】

Noto 涵盖了世界上所有主要语言&#xff0c;包括欧洲&#xff0c;非洲&#xff0c;中东&#xff0c;印度语&#xff0c;南亚和东南亚&#xff0c;中亚&#xff0c;美洲和东亚语言。也支持几个少数民族和历史语言。不久前&#xff0c;还发布了针对文、日文、韩文的开源字体——N…

5月8日全国软考办专家做客51CTO谈:软考政策、考前复习方法及考场技巧

访谈实录>>软考专家访谈实录之一&#xff1a;分数线和通过率是如何确定的&#xff1f;软考专家访谈实录之二&#xff1a;今年的试题会增加难度吗&#xff1f;软考专家访谈实录之三&#xff1a;论文应考秘笈2008年上半年全国软考时间&#xff1a;5月24日、25日。软考临近&…

Vue之引用DOM的ref属性

ref 被用来给DOM元素或子组件注册引用信息。引用信息会根据父组件的 $refs 对象进行注册。如果在普通的DOM元素上使用&#xff0c;引用信息就是元素; 如果用在子组件上&#xff0c;引用信息就是组件实例 注意&#xff1a;只要想要在Vue中直接操作DOM元素&#xff0c;就必须用r…

Neutron中的Service类

Service是OpenStack中非常重要的一个概念&#xff0c;各个服务的组件都以Service类的方式来进行交互。 Neutron中的Service类继承自rpc中的Service&#xff0c;总体的继承关系为 neutron.openstack.common.service.Service类-->neutron.common.rpc.Service类-->neutron.s…

[Linux C]列出指定目录下的所有文件(夹)

在Linux下&#xff0c;用C语言实现列出指定目录下的所有文件和文件夹&#xff1a; #include <stdio.h>#include <dirent.h>#include <stdlib.h>int main(){DIR *dirp;struct dirent *direntp;dirp opendir("/home/zcm/program/eclipse");if(dirp…

打扫房间,做减法

今天和很多同事都聊了聊天&#xff0c;对于现有的产品&#xff0c;如何更好的修订&#xff0c;大致形成了一个思路&#xff1a; 打扫房间&#xff0c;让产品更加的干净&#xff0c;使其易于维护和修订 做减法&#xff0c;去掉无用和临时增加的功能&#xff0c;使其更加易用 定期…