短信加密此类功能由于新手学习的需求量较小,所以在网上很少有一些简单的demo供新手参考。笔者做到此处也是花了比较多的时间自我构思,具体的过程也是不过多描述了,讲一下demo的内容。(源码在文章结尾)

  

 

demo功能:

1、可以发送短信并且加密(通过改变string中的char)

2、能够查看手机中的短信

3、能够给收到的加密短信解密。

涉及到的知识点:

1、intent bundle传递

2、ContentResolver获取手机短信

3、listveiw与simpleAdapter

4、发送短信以及为发送短信设置要监听的广播

遇到的问题:

1、发送短信字符过长会导致发送失败

解决方法:设置发送每条短信为70个字以内。

原理:每条短信限制160字符以内,每个汉字是2个字符。平时我们发送短信几乎不限长度,是因为一旦超过了单条短信的长度,手机会自动分多条发送,然后接收方分多条接收后整合在一起显示。

代码:

MainActivity:

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);InitView();}private void InitView() {Button send=(Button)findViewById(R.id.bt_send);Button receive=(Button)findViewById(R.id.bt_receive);send.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent=new Intent(MainActivity.this,SendActivity.class);startActivity(intent);}});receive.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent=new Intent(MainActivity.this,ReceiveActivity.class);startActivity(intent);}});}
}

SendActivity:

import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;/*** Created by 佳佳 on 2015/12/21.*/
public class SendActivity extends Activity {private IntentFilter sendFilter;private SendStatusReceiver sendStatusReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_send);InitView();}private void InitView() {Button cancel = (Button) findViewById(R.id.cancel_edit);Button send = (Button) findViewById(R.id.send_edit);final EditText phone = (EditText) findViewById(R.id.phone_edit_text);final EditText msgInput = (EditText) findViewById(R.id.content_edit_text);//为发送短信设置要监听的广播sendFilter = new IntentFilter();sendFilter.addAction("SENT_SMS_ACTION");sendStatusReceiver = new SendStatusReceiver();registerReceiver(sendStatusReceiver, sendFilter);send.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(SendActivity.this, "加密发送中,请稍后...", Toast.LENGTH_SHORT).show();//接收edittext中的内容,并且进行加密//倘若char+8超出了表示范围,则把原字符发过去String address = phone.getText().toString();String content = msgInput.getText().toString();String contents = "";for (int i = 0; i < content.length(); i++) {try {contents += (char) (content.charAt(i) + 8);}catch (Exception e) {contents += (char) (content.charAt(i));}}//Log.i("hahaha",contents);//发送短信//并使用sendTextMessage的第四个参数对短信的发送状态进行监控SmsManager smsManager = SmsManager.getDefault();Intent sentIntent = new Intent("SENT_SMS_ACTION");PendingIntent pi = PendingIntent.getBroadcast(SendActivity.this, 0, sentIntent, 0);smsManager.sendTextMessage(address, null,contents.toString(), pi, null);}});cancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {finish();}});}class SendStatusReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (getResultCode() == RESULT_OK) {//发送成功Toast.makeText(context, "Send succeeded", Toast.LENGTH_LONG).show();Intent intent1 = new Intent(SendActivity.this, ReceiveActivity.class);startActivity(intent1);finish();} else {//发送失败Toast.makeText(context, "Send failed", Toast.LENGTH_LONG).show();}}}@Overrideprotected void onDestroy() {super.onDestroy();//在Activity摧毁的时候停止监听unregisterReceiver(sendStatusReceiver);}
}

ReceiveActivity:

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** Created by 佳佳 on 2015/12/21.*/
public class ReceiveActivity extends Activity implements AdapterView.OnItemClickListener{private TextView Tv_address;private TextView Tv_body;private TextView Tv_time;private ListView listview;private List<Map<String, Object>> dataList;private SimpleAdapter simple_adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_receive);InitView();}@Overrideprotected void onStart() {super.onStart();RefreshList();}private void InitView() {Tv_address = (TextView) findViewById(R.id.tv_address);Tv_body = (TextView) findViewById(R.id.tv_body);Tv_time = (TextView) findViewById(R.id.tv_time);listview = (ListView) findViewById(R.id.list_receive);dataList = new ArrayList<Map<String, Object>>();listview.setOnItemClickListener(this);}private void RefreshList() {//从短信数据库读取信息Uri uri = Uri.parse("content://sms/");String[] projection = new String[]{"address", "body", "date"};Cursor cursor = getContentResolver().query(uri, projection, null, null, "date desc");startManagingCursor(cursor);//此处为了简化代码提高效率,仅仅显示20条最近短信for (int i = 0; i < 20; i++) {//从手机短信数据库获取信息if(cursor.moveToNext()) {String address = cursor.getString(cursor.getColumnIndex("address"));String body = cursor.getString(cursor.getColumnIndex("body"));long longDate = cursor.getLong(cursor.getColumnIndex("date"));//将获取到的时间转换为我们想要的方式SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");Date d = new Date(longDate);String time = dateFormat.format(d);Map<String, Object> map = new HashMap<String, Object>();map.put("address", address);map.put("body", body+"body");map.put("time", time+" time");dataList.add(map);}}simple_adapter = new SimpleAdapter(this, dataList, R.layout.activity_receive_list_item,new String[]{"address", "body", "time"}, new int[]{R.id.tv_address, R.id.tv_body, R.id.tv_time});listview.setAdapter(simple_adapter);}@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {//获取listview中此个item中的内容//content的内容格式如下//{body=[B@43c2da70body, address=+8615671562394address, time=2015-12-24 11:55:50time}String content = listview.getItemAtPosition(i) + "";String body = content.substring(content.indexOf("body=") + 5,content.indexOf("body,"));//Log.i("hahaha",body);String address = content.substring(content.indexOf("address=") + 8,content.lastIndexOf(","));//Log.i("hahaha",address);String time = content.substring(content.indexOf("time=") + 5,content.indexOf(" time}"));//Log.i("hahaha",time);//使用bundle存储数据发送给下一个ActivityIntent intent=new Intent(ReceiveActivity.this,ReceiveActivity_show.class);Bundle bundle = new Bundle();bundle.putString("body", body);bundle.putString("address", address);bundle.putString("time", time);intent.putExtras(bundle);startActivity(intent);}
}

ReceiveActivity_show:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;/*** Created by 佳佳 on 2015/12/24.*/
public class ReceiveActivity_show extends Activity {private TextView Address_show;private TextView Time_show;private TextView Early_body_show;private TextView Late_body_show;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_receive_show);InitView();}private void InitView() {Address_show = (TextView) findViewById(R.id.address_show);Time_show = (TextView) findViewById(R.id.time_show);Early_body_show = (TextView) findViewById(R.id.early_body_show);Late_body_show = (TextView) findViewById(R.id.late_body_show);//接收内容和idBundle bundle = this.getIntent().getExtras();String body = bundle.getString("body");String time = bundle.getString("time");String address = bundle.getString("address");Address_show.setText(address);Early_body_show.setText(body);Time_show.setText(time);//对短信消息进行解密后显示在textview中//倘若char+8超出了表示范围,则直接按照原字符解析String real_content = "";for (int i = 0; i < body.length(); i++) {try {char textchar=(char) (body.charAt(i) + 8);real_content += (char) (body.charAt(i) - 8);}catch (Exception e){real_content += (char) (body.charAt(i));}}Late_body_show.setText(real_content);}}

activity_main:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#000"android:padding="12dp"android:text="加密短信"android:textColor="#fff"android:textSize="25sp"android:textStyle="bold" /><Buttonandroid:layout_marginTop="120dp"android:id="@+id/bt_send"android:layout_width="200dp"android:layout_height="80dp"android:text="发送加密短信"android:layout_gravity="center"android:textSize="20dp"/><Buttonandroid:id="@+id/bt_receive"android:layout_width="200dp"android:layout_height="80dp"android:layout_gravity="center"android:text="解密本地短信"android:textSize="20dp"android:layout_below="@+id/bt_send"/></LinearLayout>

activity_send:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="10dp"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="加密短信发送"android:textColor="#000"android:textSize="35sp" /><Viewandroid:layout_width="match_parent"android:layout_height="3dp"android:layout_marginBottom="20dp"android:background="#CECECE" /><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:text="发送至:"android:textSize="25sp" /><EditTextandroid:id="@+id/phone_edit_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:background="@drawable/edit_text_style"android:hint="接收人手机号码"android:maxLength="15"android:maxLines="1"android:textSize="19sp"android:singleLine="true" /><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:text="发送内容"android:textSize="25sp" /><EditTextandroid:id="@+id/content_edit_text"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:background="@drawable/edit_text_style"android:gravity="start"android:hint="单条短信请保持在70字以内"android:maxLength="70"android:textSize="19sp"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"><Buttonandroid:id="@+id/cancel_edit"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="取消编辑"android:textSize="20sp" /><Buttonandroid:id="@+id/send_edit"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="发 送"android:textSize="20sp" /></LinearLayout></LinearLayout>
</LinearLayout>

activity_receive:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="所有短信"android:textColor="#fff"android:background="#000"android:textSize="23sp"android:textStyle="bold"/><ListViewandroid:id="@+id/list_receive"android:layout_width="match_parent"android:layout_height="match_parent"></ListView></LinearLayout>

activity_receive_show:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#000"android:padding="12dp"android:text="短信解密"android:textColor="#fff"android:textSize="25sp"android:textStyle="bold" /><TableLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="10dp"android:stretchColumns="1"android:shrinkColumns="1"><TableRow android:layout_marginTop="10dp"android:layout_width="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:text="号码:"android:textColor="#000"android:textSize="20sp" /><TextViewandroid:id="@+id/address_show"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:background="@drawable/edit_text_style"android:maxLines="1"android:singleLine="true"android:textSize="18sp" /></TableRow><TableRowandroid:layout_width="match_parent"android:layout_marginBottom="10dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:text="时间:"android:textColor="#000"android:textSize="20sp" /><TextViewandroid:id="@+id/time_show"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:background="@drawable/edit_text_style"android:maxLines="1"android:textSize="18sp" /></TableRow><TableRow android:layout_marginBottom="10dp"android:layout_width="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:text="原文本:"android:textColor="#000"android:textSize="20sp" /><TextViewandroid:id="@+id/early_body_show"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/edit_text_style"android:minLines="6"android:maxLines="6"android:textSize="18sp"/></TableRow><TableRowandroid:layout_width="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:text="解析后:"android:textColor="#000"android:textSize="20sp" /><TextViewandroid:id="@+id/late_body_show"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/edit_text_style"android:minLines="6"android:maxLines="6"android:singleLine="false"android:textSize="18sp"/></TableRow></TableLayout>
</LinearLayout>

源码地址:http://download.csdn.net/detail/double2hao/9376630

android短信加密(发送加密短信,解密本地短信)相关推荐

  1. ios10 android 短信,ios10系统短信怎么发送手写内容?ios10短信发送手写内容教程[多图]...

    ios10又有新功能啦啦!!小伙伴们赶紧奔走呼号,ios10系统短信可以发送手写内容,听起来就很酷炫!ios10系统短信怎么发送手写内容?来看看ios10短信发送手写内容教程吧! ios10系统短信怎 ...

  2. android eclipse加密,Elliptic Curve Cryptography:在eclipse android中使用NFC发送加密消息

    我目前正在研究一个ECC项目. 所以项目是这样的,我想从我的Android手机使用NFC向非接触式智能卡发送加密消息. 标签由不同的团队开发,所以这不是问题所在. 我已经在eclipse上创建了一个程 ...

  3. 使用Mob进行短信验证码发送

    首先,很多第三方短信验证码都可以,为什么我要选择mob的呢? 因为mob的短信验证码是完全免费 并且支持IOS,Android,Unity3d,Cocos2d-X的集成 Mob的官网:全球领先的数据智 ...

  4. QPW 手机短信验证码发送日志表(tf_sms_send_log)

    文章目录 手机短信验证码发送日志表 需求说明 手机短信验证码发送日志表 CREATE TABLE `tf_sms_send_log` (`send_id` bigint(11) NOT NULL AU ...

  5. 短信验证码发送失败的常见原因有哪些?

    短信验证码现在几乎已成为互联网各行业的标配所在,在账户注册.密码修改.支付确认等方面发挥着重要的作用.目前通过短信验证码接口接入第三方短信验证码平台的短信服务,99%以上的用户基本上都可以在几秒钟之内 ...

  6. 短信系统定制平台组成—移讯云短信系统

    短信系统定制平台组成-移讯云短信系统 短信平台组成 短信平台由C#源码开发,系统由: 1:短信平台客户端网页版. 2:短信平台总后台网页版. 3:短信平台发送服务端. 4:短信平台数据库. 5:短信服 ...

  7. 短信后台构架开发说明—移讯云短信系统

    短信后台构架开发说明-移讯云短信系统 通道地区设置 通道地区设置在通道路由模块中 作用:用于设置接入的发送通道可发送哪个地区.例如接入通道后这个通道只能发 某个城市的.则就设置此通道未此城市.当用户提 ...

  8. android 应用加密_加密的短信应用程序android

    android 应用加密 重点 (Top highlight) In this tutorial, we'll build an encrypted chat/messaging example ap ...

  9. 毕业设计_Android短信查询及加密系统_短信查询

    上回介绍了系统的会话加密功能的实现,这回介绍一下短信查询功能.软件实现了根据联系人号码.短信内容.短信发生时间进行多条查询,支持查询条件的或运算和与运算.多条件查询指的是多个查询字段的联合查询,可以这 ...

最新文章

  1. Nginx搭建负载均衡集群
  2. iOS_20_微博自己定义可动画切换的导航控制器
  3. 中小企业ERP快速实施的八大准则
  4. python算法与数据结构-归并排序算法
  5. 解决vue中路由跳转同一个路径报错
  6. Android开发之Git提交Template模板配置
  7. 干货|MIT线性代数课程精细笔记[第一课]
  8. C语言解决迭代递推问题
  9. feign整合sential_Sentinel 和 Feign 集成时,方法名称写错
  10. vscode插件版本的选择与安装
  11. bmp转换为YUV420p指南
  12. 什么是外贸网站?企业为什么要建设外贸网站?
  13. ios下使用speex进行音频压缩
  14. CH9102国产USB转高速串口芯片兼容替代CP2102
  15. 如何进行航拍全景摄影(下)
  16. 认识DTU什么是4GDTU设备
  17. MATLAB 读取和显示 bin 文件数据
  18. 某宁detect、feature参数分析
  19. 计算机Web书籍推荐
  20. 按键精灵输出中文乱码,输出不是?,输出如Ö16:48ÀÂ

热门文章

  1. 60 个程序员才懂的梗!太形象了!
  2. iOS 应用剖析-目录结构
  3. 非线性光纤光学_深度解析:光纤随机激光器及其应用研究进展!
  4. UG模具设计之后模滑块成型
  5. ABC成本法(Activity Based Costing) (转载)
  6. 农村污水处理工程的运维相关内容介绍
  7. Chapter 4 Naive Bayes and Sentiment Classification
  8. 期权中的两个概念:认沽期权和期权激励
  9. VS2017中NCNN使用vulkan
  10. flowableの历史查询