Android项目:手机安全卫士(7)—— 手机防盗功能
来源:互联网 发布:eviews面板数据f检验 编辑:程序博客网 时间:2024/05/21 07:07
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() { } @Override public 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() { } @Override public IBinder onBind(Intent intent) { return null; } @Override public 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); } @Override public void onDestroy() { super.onDestroy(); mLM.removeUpdates(mListener); } class MyLocationListener implements LocationListener{ // 位置发生变化 @Override public 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自杀的方法) } // 位置提供者状态发生变化 @Override public void onStatusChanged(String provider, int status, Bundle extras) { } // 定位开关开启 @Override public void onProviderEnabled(String provider) { } // 定位开关关闭 @Override public 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)—— 手机防盗功能
- Android项目:手机安全卫士(6)—— 手机防盗设置向导(二)
- Android项目:手机安全卫士(6)—— 手机防盗设置向导(二)
- Android项目:手机安全卫士(6)—— 手机防盗设置向导
- Android项目:手机安全卫士(2)—— 版本升级
- Android项目:手机安全卫士(8)—— 管理员权限
- Android项目:手机安全卫士(14)—— 短信备份
- Android项目:手机安全卫士(16)—— 复杂 ListView
- 【边做项目边学Android】手机安全卫士06-手机防盗之自定义对话框
- 【边做项目边学Android】手机安全卫士07-手机防盗之进入限制
- 【边做项目边学Android】手机安全卫士09-手机防盗界面设置向导1
- Android项目:手机安全卫士(15)—— 获取手机安装应用与存储空间
- 学习笔记之《Android项目实战——手机安全卫士》
- Android手机安全卫士(二)---设置、自定义控件属性、md5加密、手机防盗
- 手机安全卫士开发系列(1)——功能列表
- 练手小项目(5)安全卫士——手机加速
- Android手机安全卫士——01
- Android手机安全卫士——02
- Hive中的三种不同的数据导出方式介绍
- AsyncHttpClient使用
- CocoaPods spec lint 警告处理 source: The version should be included in the Git tag
- 从google的DrawerLayout来看看scroller的使用方法
- 设计模式六大原则(6):开闭原则
- Android项目:手机安全卫士(7)—— 手机防盗功能
- 【精】客户端(iOS、Android)/Server,APP内部的通信协议,跨平台方案
- 圆环百分比自定义View
- IBATIS操作BLOB和CLOB
- RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
- matlab中的文件操作
- 移动前端调试方案(Android + Chrome 实现远程调试)
- 使用IntelliJ IDEA 15和Maven 开发Spring Data JPA + MVC Web应用
- protoc buffer (java)详解及应用