Android项目:手机安全卫士(7)—— 手机防盗功能

1 介绍

前面已经将手机防盗的界面、业务代码逻辑完成了,现在就是最后的功能实现了,手机防盗主要有这么几个功能:

  • 短信:发送警报短信,接收命令短信
  • 播放报警音乐
  • 定位:GPS 定位

  • Android 项目:手机安全卫士(1)—— 闪屏界面

  • Android 项目:手机安全卫士(2)—— 版本升级
  • Android 项目:手机安全卫士(3)—— 主界面布局
  • Android 项目:手机安全卫士(4)—— 自定义(组合)控件、属性
  • Android 项目:手机安全卫士(5)—— 自定义弹窗
  • Android 项目:手机安全卫士(6)—— 手机防盗设置向导
  • Android 项目:手机安全卫士(6)—— 手机防盗设置向导(二)

项目源码地址(实时更新):https://github.com/xwdoor/MobileSafe

2 发送与接收短信

在 BootCompleteReceiver 广播中,如果检测到 sim 卡发生变化,则向安全号码发送报警短信,代码如下:

//发送警报短信SmsManager smsManager = SmsManager.getDefault();//短信管理器String phone = PrefUtils.getString(BaseActivity.PREF_PHONE_NUMBER,"",context);smsManager.sendTextMessage(phone,null,"SIM卡发生变化",null,null);

当然,别忘了添加权限哦:
<uses-permission android:name="android.permission.SEND_SMS"/>

能发送短信,就能够接收到失主发送过来的命令短信,这个时候就要做短信拦截,首先创建一个广播接收器:SmsReceiver,因为要拦截短信,可以在 AndroidManifest.xml 文件中设置较高的优先级,如下所示:

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

广播接收到短信后,先进行解析,先转换为 Object 数组,然后将数组中的每一个元素转换为 byte 数组,以此构建 SmsMessage 对象,然后就可以获取一些短信的信息,如代码所示,接收短信也是需要权限的哦:<uses-permission android:name="android.permission.RECEIVE_SMS"/>

public class SmsReceiver extends BroadcastReceiver {public SmsReceiver() {}@Overridepublic void onReceive(Context context, Intent intent) {Object[] pdus = (Object[]) intent.getExtras().get("pdus");for (Object pdu:pdus){//短信超过140字节,会分为多条短信发送SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu);String address = sms.getOriginatingAddress();String msg = sms.getMessageBody();Log.i(BaseActivity.TAG_LOG,"address-->"+address+",msg-->"+msg);if("#*alarm*#".equals(address)){//报警命令}}}}

仅仅是这样是不够的,因为这里只是做了短信的接收与解析,并没有实现拦截的功能,系统还是会提示收到了短信,需要判断短信是否为特殊命令短信,然后再做出拦截操作:

if("#*alarm*#".equals(address)){//报警命令//播放报警音乐//拦截短信abortBroadcast();}else if ("#*location*#".equals(address)){//gps定位命令//拦截短信abortBroadcast();}

3 播放警报音乐

当收到报警命令的短信时,这个时候就可以播放报警音乐,方便你找到这个小偷,当然啦,你要在附近才行,所以为了避免打草惊蛇,你应该用 GPS 定位后,来到他的附近,再发送警报命令。让我们来看看,它是怎么警报的:

//播放报警音乐MediaPlayer player = MediaPlayer.create(context, R.raw.ylzs);player.setVolume(1,1);//音量最大player.setLooping(true);//循环播放player.start();//开始播放

4 GPS 定位

要想找回丢失的手机,定位是必不可少的功能,现在的手机大都支持 A-GPS 定位,写到这里,先来说说定位的几种方法:

  • 网络定位:通过 IP 地址定位
  • 基站定位:运营商的电话信号基站定位
  • GPS 定位:美国的一套定位系统,中国的最好的就是北斗了
  • A-GPS 定位:辅助卫星定位,网络 + GPS 综合定位

大概就是这么几种,我们这里采用网络 + GPS 综合定位,先创建一个服务:LocationService,用于获取定位,代码如下:

public class LocationService extends Service {private LocationManager mLM;private MyLocationListener mListener;public LocationService() {}@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();mLM = (LocationManager) getSystemService(LOCATION_SERVICE);mListener = new MyLocationListener();Criteria criteria = new Criteria();criteria.setAccuracy(Criteria.ACCURACY_FINE);//获取良好精度criteria.setCostAllowed(true);//允许流量消耗(花费、花钱)String bestProvider = mLM.getBestProvider(criteria, true);// 获取当前最好的位置提供者mLM.requestLocationUpdates(bestProvider,0,0, mListener);}@Overridepublic void onDestroy() {super.onDestroy();mLM.removeUpdates(mListener);}class MyLocationListener implements LocationListener{// 位置发生变化@Overridepublic void onLocationChanged(Location location) {String jLongitude = "j: "+location.getLongitude();//经度String wLatitude = "w: "+location.getLatitude();//纬度String phone = PrefUtils.getString(BaseActivity.PREF_PHONE_NUMBER,"",getApplicationContext());//获取安全号码SmsManager smsManager = SmsManager.getDefault();smsManager.sendTextMessage(phone,null,"Location-->"+jLongitude+";"+wLatitude,null,null);stopSelf();//停止服务(service自杀的方法)}// 位置提供者状态发生变化@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}// 定位开关开启@Overridepublic void onProviderEnabled(String provider) {}// 定位开关关闭@Overridepublic void onProviderDisabled(String provider) {}}}

通过 getSystemService() 方法获取定位管理器,然后获取当前最好的位置提供者,获取到当前位置后,通过短信的形式发送给失主,之后就可以关闭定位服务了。每当手机收到定位命令的短信时,都需要开启该服务。
当然,不要忘了添加权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

5 总结

今天的东西还是很有用的,其实这些知识点并不需要记住,只需要知道流程,有这么一个方法即可。以上的代码我暂时只是在模拟器上测试过,没有在真机上调试,不能包过,万一有问题呢。

  • Android 项目:手机安全卫士(1)—— 闪屏界面
  • Android 项目:手机安全卫士(2)—— 版本升级
  • Android 项目:手机安全卫士(3)—— 主界面布局
  • Android 项目:手机安全卫士(4)—— 自定义(组合)控件、属性
  • Android 项目:手机安全卫士(5)—— 自定义弹窗
  • Android 项目:手机安全卫士(6)—— 手机防盗设置向导
  • Android 项目:手机安全卫士(6)—— 手机防盗设置向导(二)

项目源码地址(实时更新):https://github.com/xwdoor/MobileSafe

Android项目:手机安全卫士(7)—— 手机防盗功能相关推荐

  1. 【边做项目边学Android】手机安全卫士09-手机防盗界面设置向导1

    本次主要做手机防盗界面的设置向导功能界面的设计. 需求: 当用户进入手机防盗界面时,判断用户是否已经进行过设置向导: 如果用户已经设置过手机防盗,则不再提示用户进入手机向导 若还没有设置,则提示用户进 ...

  2. 【边做项目边学Android】手机安全卫士07-手机防盗之进入限制

    上次写到在进入手机但·防盗界面时需要有密码限制,首先第一次进入时会弹出对话框提示用户设置密码:再次进入时会要求用户输入密码:这次来具体实现上述功能. 首次登录,设置密码 首先,我们的密码是保存在Sha ...

  3. 关于cordova打包的android项目,禁止随手机系统改变字体大小的解决方法

    1. 我用的是最新版的cordova,在项目根目录下找到 node_modules\cordova-android\framework\src\org\apache\cordova\engine\Sy ...

  4. Android项目之仿360手机助手项目

    主页使用了actionbar + drawlayout 结构 设计模式使用了 BaseAdapter + BaseHolder + Protocol + BaseFragment Protocol 读 ...

  5. 基于eclipse的android项目实战—博学谷(新功能四)签到

    在前面博学谷项目的基础上进行改善和增加新功能 源码资源下载:https://download.csdn.net/download/hyh17808770899/19844673 博学谷的第四个新功能: ...

  6. 基于eclipse的android项目实战—博学谷(新功能五)更换头像

    在前面博学谷项目的基础上进行改善和增加新功能 源码资源下载:https://download.csdn.net/download/hyh17808770899/19844673 博学谷的第五个新功能: ...

  7. 基于eclipse的android项目实战—博学谷(新功能二)欢迎界面倒计时

    在前面博学谷项目的基础上进行改善和增加新功能 源码资源下载:https://download.csdn.net/download/hyh17808770899/19844673 博学谷的第二个新功能: ...

  8. Android毕业设计——基于Android+Eclipse的手机安全卫士设计与实现(毕业论文+程序源码)——手机安全卫士

    基于Android+Eclipse的手机安全卫士设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Android+Eclipse的手机安全卫士设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  9. 基于eclipse的android项目实战—博学谷(二十三)其他功能

    本项目是用eclipse软件编写,经过我的亲自实践,其真实有效,希望能给您有所帮助 项目版本:android5.1.1 ADT版本:23.0.6 SDK版本:24.4.1 运行模拟器:夜神模拟器 若有 ...

  10. android实现单词测试功能,android项目实战-背呗单词DEV07-单词测试实现(示例代码)...

    该篇说明 该篇我们进行单词测试实现讲解 也就是单词测试界面WordExamActivity中功能 布局也需要在xml中实现 但是也需要有单词测试视图类来设置一些值具体查看对照源码 在该界面中,测试完后 ...

最新文章

  1. javaweb 后台知识点
  2. HAProxy实现负载均衡及高可用集群(corosync+pacemaker)
  3. c语言的翻译叫什么_什么是编译器?什么是集成开发环境?
  4. @RequestParam注解使用
  5. 【unity】Inspector视图中的get/set使用(四)
  6. 金蝶站点重新输入服务器ip,金蝶KIS客户端和服务器不在同一IP段互相访问
  7. 【Python】keras使用Lenet5识别mnist
  8. ThreadLocal了解
  9. SharePoint开发错误—列表自定义表单出现“未将对象引用设置到对象的实例”
  10. AD元件库和封装库转换成KiCAD库方法
  11. mysql如何源码安装_超详细的MySQL源码编译安装与配置 值得收藏!
  12. 图像质量评价 开源项目汇总
  13. 字节跳动《Vim 中文手册》火了,完整版 PDF 开放下载!
  14. Linux内核中网络数据的传输
  15. NAXX Demo3_JSQ_02 BUG
  16. DVWA-XSS(Reflected) 全级别教程
  17. java的开发工具是什么_java都用什么开发工具
  18. 苹果四大供应商向高通索赔90亿;金立否认裁定破产清算...
  19. 实现页面静态化(模型数据+模板=静态化)
  20. 走进“开源SDR实验室” 一起玩转GNU Radio:信号延迟Delay模块

热门文章

  1. linux终端的python绘图,linux终端没有GUI时python使用matplotlib如何画图
  2. java 前后端解压缩字符串_接口实现后台GZIP压缩,pako.js 前端解压
  3. OPPO Reno5 Pro评测:给妹子拍视频就选它了
  4. 基于javaweb的在线甜品商城系统(java+ssm+jsp+javascript+mysql)
  5. 谁有一夜暴富的经历,敢把你的暴富经过爆料上来吗?
  6. 防火墙---系统管理
  7. 【python bug修复】——Script file ‘D:\softwares_install\Anaconda3\envs\PartTimes\Scripts\pip-scrip
  8. dnf服务器预更新状态,预更新 | 手游网游页游攻略大全
  9. 银行在“智能客服”时代都有哪些创新应用?
  10. P95、P98 实时分位数