android实现短信自动转发
我有两张手机卡,一张专门用来绑定银行卡的,一张拿来打电话用的。但是我的手机只能装一张银行卡,现在问题来了,我出门的就要带俩手机,非常麻烦。所以我就写了一个短信转发功能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实现短信自动转发相关推荐
- 使用USB 3G上网卡+树莓派搭建接受短信自动转发邮箱的服务
背景:人在国外刚下飞机 咳咳,人在国外,国内很多网络,电话服务都需要短信验证,一直以来都用的双卡手机来解决这个问题.最近换了单卡手机,琢磨着3g上网卡应该可以接受短信,再配合7D24H运行的树莓派 ...
- iphone短信自动转发_如何在iPhone上删除或转发个人短信
iphone短信自动转发 Deleting an entire message thread on the iPhone is easy, but what if you want to just d ...
- android 短信自动转发功能
1.首先需要申请权限 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:andro ...
- 短信自动转发到MySQL_联移短信中间件
) 联移短信服务中间件向客户系统公开四个共享数据库表:待发送任务表(T_SendTask).已发送记录表(T_SentRecord).接收记录表(T_RecRecord).事件日志记录表(T_Even ...
- Android 拦截短信并转发,骚扰电话“响一声”量最大 垃圾短信呈现快速下降趋势...
原标题:骚扰电话"响一声"量最大 垃圾短信呈现快速下降趋势 昨天,360手机卫士发布<2016年中国手机安全状况报告>.<报告>显示,2016年骚扰电话拦截 ...
- Tasker 手机短信自动转发
js代码: //定义post方法 function posthttp(url, data) { let xhr = new XMLHttpRequest(); xhr.addEvent ...
- 短信自动转发到另一个手机_以 wmghz.com 为例,简单实现打一个网址自动就转到另一个网址...
怎么简单实现打一个网址自动就转到另一个网址,以 wmghz.com为例 B103 [外贸干货组]星球里的成员都知道,这个组的网站全称是 waimaoganhuozu.com ,比较长,也容易输错.怎么 ...
- android 短信转发设置权限,用Tasker实现Android手机短信转发到钉钉
之前的一篇文章[<用Tasker实现Android手机短信转发到微信>](https://taskerm.com/2018/12/22/forwarded-sms-to-wechat. ...
- android获取短信验证码自动填入
android获取短信验证码自动填入的简单实现,可以直接用 权限 <!--读取短信权限--> <uses-permission android:name="android. ...
最新文章
- 在开发流程中嵌入安全测试
- 软件驱动安装在docker_docker 安装软件
- ICMP 隧道——将流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测...
- linux 6.4定时启动,Centos6.4 设置开机自动以某个非root用户启动脚本
- 【pmcaff】2014年最“脑洞大开”的新科技
- Oracle数据库导入导出命令imp/exp
- 漫画:什么是狭义相对论?
- 新磁盘创建lvm并挂载
- JDK源码(8)-Byte
- numpy where
- List对象集合通过对象属性进行查找
- SpringCloud版本Hoxton SR5 --- 第五讲:zuul 路由、过滤、容错与回退、集群、高可用
- Pytorch模型量化实践并以ResNet18模型量化为例(附代码)
- 京东风控团队带你全方位解读特征工程
- 如何学Android
- CMT: Convolutional Neural Networks Meet Vision Transformers
- App个人开发者已末路穷途
- EGNet: Edge Guidance Network for Salient Object Detection 论文及代码解读
- 未授权和敏感文件泄露
- 【二分法】计蒜客习题 切割钢管