我有两张手机卡,一张专门用来绑定银行卡的,一张拿来打电话用的。但是我的手机只能装一张银行卡,现在问题来了,我出门的就要带俩手机,非常麻烦。所以我就写了一个短信转发功能app,这样就可以只带一个手机出门了。下面我就来分享一下我的app实现过程。

具体功能:
1、实现转发号码的设置。
2、实现关闭软件或者重启系统也可自动转发。

首先我们的加上权限:

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

然后通过广播机制接受获取新消息内容。广播应该在AndroidManifest.xml中注册:

<receiver
            android:name=".TransmitReceiver"android:enabled="true"android:exported="true" ><intent-filter android:priority="999"><action android:name="android.provider.Telephony.SMS_RECEIVED" /></intent-filter></receiver>

这样才将广播注册在系统中,即可实现重启手机仍然奏效。

一、TransmitReceiver类:

public class TransmitReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();SmsMessage msg = null;if (null != bundle) {Object[] smsObj = (Object[]) bundle.get("pdus");for (Object object : smsObj) {msg = SmsMessage.createFromPdu((byte[]) object);Date date = new Date(msg.getTimestampMillis());//时间SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String receiveTime = format.format(date);String number = msg.getOriginatingAddress();String message = msg.getDisplayMessageBody();message = "转发短信来自:"+number+"\n"+"转发短信内容:"+message+"\n"+"转发短信时间:"+receiveTime;Log.i("noco",message);String transmitNunmber = MainActivity.getSettingNote(context,"number");if (transmitNunmber.equals("")){//第一次安装软件时,在没有设置转发号码的时候不转发}else {//添加了号码transmitMessageTo(transmitNunmber, message);}}}}public void transmitMessageTo(String phoneNumber,String message){//转发短信SmsManager manager = SmsManager.getDefault();/** 切分短信,每七十个汉字切一个,短信长度限制不足七十就只有一个:返回的是字符串的List集合*/List<String> texts =manager.divideMessage(message);//这个必须有for(String text:texts){manager.sendTextMessage(phoneNumber, null, text, null, null);}}```

二、MainActivity:

public class MainActivity extends Activity {private final int CONTINUE = 3;//继续输入private final int CHANGE = 0;//修改号码private final int SAVE = 1;//保存号码private final int INPUT = 2;//输入号码private Button button;private EditText number;private boolean flag;private int state;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.button);number = (EditText) findViewById(R.id.number);flag = getSettingNote(this,"number").equals("");//判断是否为第一次进入软件if(flag){state = INPUT;buttonState(state);}else {state = CHANGE;buttonState(state);}number.setText(getSettingNote(this,"number"));//显示已经保存了的号码number.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {int count = s.length();Log.i("noco",count+"");if(count > 0 && count <11){state = CONTINUE;buttonState(state);}else if (count == 11){state = SAVE;buttonState(state);}else {button.setEnabled(false);}if (getSettingNote(MainActivity.this,"number").equals(s.toString())){state = CHANGE;buttonState(state);}}});button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String numberStr = number.getText().toString();if(numberStr.length() == 11){if (getSettingNote(MainActivity.this,"number").equals(numberStr)){number.setText("");state = INPUT;buttonState(state);}else {saveSettingNote(MainActivity.this,"number",numberStr);state = CHANGE;buttonState(state);Toast.makeText(MainActivity.this,"保存号码成功!",Toast.LENGTH_SHORT).show();}}else{Toast.makeText(MainActivity.this,"输入号码有误,请重新输入!",Toast.LENGTH_SHORT).show();}}});}private void buttonState(int state){switch (state){case INPUT:number.setText("");button.setText("输入号码");button.setEnabled(false);break;case SAVE:button.setText("保存号码");button.setEnabled(true);break;case CHANGE:button.setText("修改号码");button.setEnabled(true);break;case CONTINUE:button.setText("继续输入");button.setEnabled(false);break;}}public static void saveSettingNote(Context context,String key,String saveData){//保存设置SharedPreferences.Editor note = context.getSharedPreferences("number_save", Activity.MODE_PRIVATE).edit();note.putString(key, saveData);note.commit();}public static String getSettingNote(Context context,String key){//获取保存设置SharedPreferences read = context.getSharedPreferences("number_save", Activity.MODE_PRIVATE);return read.getString(key, "");}}

下面就是我的软件运行结果图:

源码下载:http://download.csdn.net/detail/u012925323/9455970

android实现短信自动转发相关推荐

  1. 使用USB 3G上网卡+树莓派搭建接受短信自动转发邮箱的服务

    背景:人在国外刚下飞机   咳咳,人在国外,国内很多网络,电话服务都需要短信验证,一直以来都用的双卡手机来解决这个问题.最近换了单卡手机,琢磨着3g上网卡应该可以接受短信,再配合7D24H运行的树莓派 ...

  2. iphone短信自动转发_如何在iPhone上删除或转发个人短信

    iphone短信自动转发 Deleting an entire message thread on the iPhone is easy, but what if you want to just d ...

  3. android 短信自动转发功能

    1.首先需要申请权限 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:andro ...

  4. 短信自动转发到MySQL_联移短信中间件

    ) 联移短信服务中间件向客户系统公开四个共享数据库表:待发送任务表(T_SendTask).已发送记录表(T_SentRecord).接收记录表(T_RecRecord).事件日志记录表(T_Even ...

  5. Android 拦截短信并转发,骚扰电话“响一声”量最大 垃圾短信呈现快速下降趋势...

    原标题:骚扰电话"响一声"量最大 垃圾短信呈现快速下降趋势 昨天,360手机卫士发布<2016年中国手机安全状况报告>.<报告>显示,2016年骚扰电话拦截 ...

  6. Tasker 手机短信自动转发

    js代码: //定义post方法 function posthttp(url, data) {     let xhr = new XMLHttpRequest();     xhr.addEvent ...

  7. 短信自动转发到另一个手机_以 wmghz.com 为例,简单实现打一个网址自动就转到另一个网址...

    怎么简单实现打一个网址自动就转到另一个网址,以 wmghz.com为例 B103 [外贸干货组]星球里的成员都知道,这个组的网站全称是 waimaoganhuozu.com ,比较长,也容易输错.怎么 ...

  8. android 短信转发设置权限,用Tasker实现Android手机短信转发到钉钉

    ​ 之前的一篇文章[<用Tasker实现Android手机短信转发到微信>](https://taskerm.com/2018/12/22/forwarded-sms-to-wechat. ...

  9. android获取短信验证码自动填入

    android获取短信验证码自动填入的简单实现,可以直接用 权限 <!--读取短信权限--> <uses-permission android:name="android. ...

最新文章

  1. 在开发流程中嵌入安全测试
  2. 软件驱动安装在docker_docker 安装软件
  3. ICMP 隧道——将流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测...
  4. linux 6.4定时启动,Centos6.4 设置开机自动以某个非root用户启动脚本
  5. 【pmcaff】2014年最“脑洞大开”的新科技
  6. Oracle数据库导入导出命令imp/exp
  7. 漫画:什么是狭义相对论?
  8. 新磁盘创建lvm并挂载
  9. JDK源码(8)-Byte
  10. numpy where
  11. List对象集合通过对象属性进行查找
  12. SpringCloud版本Hoxton SR5 --- 第五讲:zuul 路由、过滤、容错与回退、集群、高可用
  13. Pytorch模型量化实践并以ResNet18模型量化为例(附代码)
  14. 京东风控团队带你全方位解读特征工程
  15. 如何学Android
  16. CMT: Convolutional Neural Networks Meet Vision Transformers
  17. App个人开发者已末路穷途
  18. EGNet: Edge Guidance Network for Salient Object Detection 论文及代码解读
  19. 未授权和敏感文件泄露
  20. 【二分法】计蒜客习题 切割钢管

热门文章

  1. PIC 8位单片机的分类和特点
  2. 北斗导航卫星公开服务信号频率
  3. CTFshow-Web入门writeup
  4. MSN协议分析以及Java实现MSN登陆
  5. SwiSH max——简易动画制作的最佳选择
  6. Bootstrap2和3的区别与选择指南
  7. 训练集、验证集、测试集的作用和划分比例?
  8. layui 表格行单击事件选中行前的单选框
  9. 如何在苹果笔记本上装win7系统
  10. fastadmin使用editable实现行内编辑无刷新效果