手机卫士04_ 手机定位_超级管理员_数据库

1.1 定位功能简介:

常见的定位方式:

①网络定位:(IP地址),拨号上网一般是动态分配,如果网吧公司,就是静态分配的.

比较有名的数据库:纯真Ip数据库,有很多公开的ip信息

根据ip地址定位.可能很准确,也可能只是一个大概的范围

②基站定位:必须有手机卡才能基站定位

根据手机与基站联系的信号强弱+算法定位.

定位效果:可能很准确,(与基站位置相关,周围基站越多越近效果越好.)

③GPS定位:采用卫星定位

利用卫星的位置与手机GPS模块的建立联系,通过算法判断位置.

至少需要三颗卫星,获取手机手机的位置.(头顶必须空旷,不然信号穿透效果很渣)

目前:agps模块,因为手机搜索卫星定位需要一定的时间,所以agps会先获取网络位置,大体的位置获取到了之后,再根据卫星定位获取详细位置.

精确度很高:五米-十米左右的范围.

1.2 获取手机的经纬度.

利用服务LocationManager lm = getSystemService(“LOCATION_SERVICE”);//位置管理服务

//面向对象的思想

List<String>lm.getAllproviders();//获取所有支持的位置信息,返回一个list集合

Passive;基站定位 gps:gps定位,真实手机还支持网络定位,wifi 定制

lm.requestLoactionUpdates(1,2,3,4)//请求位置的更新

1,provider 请求位置的方式:passive,gps,.....

2,minTime 请求的间隔  毫秒值

3,minDistance 请求位移的距离

4,listener 位置的提供者监听(带一些回调的方法)

4,实现LocationListener接口

重写的方法:

①onProviderEnabled //当位置提供者可用的时候

②onProviderDisabled //不可用的时候

③onStateChanged()//状态变化,可用>>不可用,不可用>>可用,当上面两个方法被调用,它就会被调用

④onLocationChanged(location)//当手机位置发生了变化就会被调用

location.getAccuracy()//获取定位精确度

location.getLatitude();//获取维度

location.getLongitude();//获取经度

额外:①ACCESS_FINE_LOCATION 权限//得到手机精准的位置

DDMS 可以设置模拟器的经纬度.

②注册了监听器之后要记得取消监听器,耗电很快的

onDestory() lm.removeUpdates(listener);

③如果GPS响应太慢,可以把距离大小,时间间隔设置为0,但是耗电更快

2 火星坐标系统

2.1 使用网站:map.baidu.com //百度把 WEB端的屏蔽掉了,手机端有

所以使用:ditu.google.cn可以直接搜索经纬度 //因确实挺

定位位置超出预期:火星坐标系统,对坐标进行了加密操作(国防安全防御系统)

错误的地图就对上错误的坐标,所以在国内地图没问题.而在国外的地图是不准确的.

一般导航软件都加入了国家保密算法,这样就可以跟导航电子地图匹配,不过这个保密算法是需要钱去买的,才能得到这一套COM接口.

地球坐标与火星坐标在网上已经有互换的算法了,可以通过这套api转换坐标.

个人小范围使用,最好不要在公开场合使用,会被查水表哦.

2.2 api:Modifyoffset.java(网上可以下到)

使用方式,拷贝该文件,创建它的对象(is)//需要一个输入流

//要把对应的数据库文件放到项目下

Mo.s2c(new PointDouble(经度,纬度))//standrad火星坐标>>实际坐标

3,手机防盗获取经纬度

①获取经纬度是一个耗时操作,但是广播接收者的生命周期比较短,所以需要开启一个后台的服务,在服务里获取手机的位置,这样即使应用被关闭了,在后台也能长期存在获取到位置信息,更符合要求.

分包:mobliesafe.service,创建服务,配置清单文件,服务是没有界面的

②在服务类中

定义一个LocationManager,并初始化, getSystemService(Location_SERVICE);

//获取所有的位置提供者lm.getAllProviders()//返回list集合

判断是否有GPS位置提供者.并且这个集合的长度大于0(防止空指针)

lm.requestLoctionUpdates(位置提供者,0,0,监听器)//请求间隔,位置间隔都为0

//自定义监听器类(方便关闭获取GPS信息)

③获取经纬度,在监听器中onLocationChanged()中参数Location.getLatitude()//获取.

保存在sp中

然后通过短信发送给安全号码

额外:发送短信之后,停止监听器,lm.removerUpdates(listenser);listener=null

停止服务stopSelf()//停止自身服务

权限:FINE_LOCATION,COARSE_LOCATION(大体位置)

④在接收指令的receiver中,开启该服务.

4,立刻清楚数据和远程锁屏操作

4.1 设备的超级管理员

查看api文档:Develop>>API Guides>>Administration>>Device Policies

作用:可以同步邮箱邮件应用,设置密码类型,远程删除数据,加密硬盘,禁用照相机,锁定设备,很多操作它都可以执行

4.2, 使用步骤:

①创建类,继承DeviceAdminReceiver.

②拷贝文档中的清单文件配置,需要更改的有receiver对应的全路径.

<receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver"
        android:label="@string/sample_device_admin"
        android:description="@string/sample_device_admin_description"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin"
            android:resource="@xml/device_admin_sample" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

Label:用户可读的说明,任意字符串(例如:手机卫士管理员)

Description:对Label的详细说明.

<meta-data>//原数据节点,不要修改name属性

resource资源文件:声明所用的安全权限.

③拷贝文档中device-admin的权限代码,创建一个XML文件夹,然后再创建一个文件(Device_admin_simple)保存

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
    <limit-password />
    <watch-login />
    <reset-password />
    <force-lock />
    <wipe-data />
    <expire-password />
    <encrypted-storage />
    <disable-camera />
  </uses-policies>
</device-admin>

额外:在系统设置中,安全>>设备管理器>>可以看到设备管理员,需要点击激活

4.3 远程锁屏和清楚数据的代码实现

//得到超级管理员管理器

DevicePolicyManager dpm = context.getSystemService(context.DEVICE_POLICY_SERVICE);

dpm.wipeData()//清楚数据,参数:WIPE_EXTERNAL_STORAGE//清楚外部内部所有.

0,只清除手机内部存储数据

//这个指令模拟器并不支持,有效果,但无作用,真实手机不要随便尝试

dpm.resetPassword(“密码”,0);//设置锁屏密码

dpm.lockNow()//立刻锁定屏幕

//记得最后把短信截取掉abortBroadCast();

5.一键锁屏应用:点击应用之后,手机就锁屏了

①点击应用就锁屏,可以通过onCreate()方法实现  ,这里用一个按钮去实现

DevicePolicyManager dpm = getSystemService(DEVICE_POLICY_RECEIVER);

Dpm.locknow();//立即锁屏

直接运行会提示:缺少超级管理员组件No active admin owned byXXX

②创建特殊的广播接收者

③配置清单文件,拷贝对应的receiver节点,修改需要修改的属性.

④拷贝权限文件,为了以防万一,不引起用户警惕,只保留force-lock标签锁屏.

额外,①需要先激活设备超级管理员(在应用里)

②一旦这个应用激活了超级管理员就不能被卸载和清除了.

卸载步骤:取消超级管理员,取消激活即可.

5.2,锁屏应用的优化:用户可能没激活应用,也可能不会取消

①执行dpm.locknow()之前判断一下是否激活了超级管理员权限

dpm.isAdminActive(who);//哪一个组件被激活了权限,返回 boolean

ComponentName who = new ComponentName(this,MyAdmin.class);

②判断是否激活了权限,并提示用户需要激活

③担心用户不知道怎么激活权限,再创建一个按钮,打开设备管理员的激活页面.

帮助文档里有Enabling the application(在超级管理员页面中)//启动超级管理页面.

下面有一段实例代码,复制即可.修改一些参数即可(激活的组件who,描述文本)

④添加一个卸载按钮帮助用户卸载

取消设备激活超级管理员:获取dpm

dpm.removeActivityAdmin(who);//取消对应组件的超级管理员

卸载当前应用:

创建意图对象,复制上层源码的packageInStaller清单文件中uninstallerativty对应的意图过滤器

注意:intent.setData(Uri.parse(“package:” + 包名(getPackageName())))

5.3 手机防盗的细节处理

5.3.1防盗界面的密码加密:md5加密解释

MessageDigest digest = MessageDigest.getInStance(“md5”);//md5是不可逆的

Md5是数字的hash摘要算法,原文>>>密文,密文XXX原文

Byte[] result = Digest.digest(byte[]);

遍历result,把每个byte转换成16进制数;

byte b ,

Int a =b&0xff 转换成int数//ff是 二进制11111111,10进制的255

Intent.toHexString(转换后的数)

然后用StringBuffer把这个byte转换的int数给拼接出来

网上的破解MD5,实际上是把大量的数据进行MD5加密之后保存在数据库,用户将查询的MD5加密串输入进去,会匹配存在的MD5串,匹配到就显示原字符串(本质还是不可逆的)

//一般向银行会对密码进行10-20次重复加密,这样得出的md5更是无法查询到了

//也可以在转换的时候b&0XFF + XX数,俗称加盐,这样也是无法查询到的

5.3.2 抽取成一个工具类,在保存密码的时候通过md5加密即可.比对密码的时候也进行加密后的字符串进行比较

6,骚扰拦截模块

业务需求:不想接收某个人的短信或电话,添加进黑名单,然后这个短信和电话就会被拦截了.以后接收到这个信息就不会再提醒了.

6.1 创建骚扰拦截的界面activity,配置清单文件,创建布局文件

6.2 标题,黑名单列表,添加按钮(右上角,设置状态选择器)

考虑到黑名单列表可能比较多,不适合放到SharedPreferences里,放到数据库里.

6.3 黑名单数据库

表字段:id标志,姓名,号码,拦截模式(手机0,短信1,两者都拦截2);

创建db包

①开启帮助类,继承父类构造,super(上下文,表名称,游标工厂,版本号)

onCreate()里定义表的SQL语句,db.execSQL(XXXX);

_id integer primary key autoincrement,主键自增长

②数据库的DAO包,实现具体的业务逻辑

在构造方法里就初始化openHelper,传入上下文

增删改查,修改的时候只需要修改拦截模式就行,因为号码输错了一般人都会删掉.

查询实际上也只是查询拦截模式而已.

6.4 单元测试 数据库增删改查

①创建一个类继承 AndroidTestCast,所有的测试逻辑都应该向测试框架抛出异常

需要上下文就getContext()

②配置清单文件,

指令集<Instumenttation>配置name,targetpackage测试的包.

Application中配置标签,导入需要的jar包,use-library

7.黑名单号码添加界面

点击添加按钮,应该就跳转到黑名单号码的添加页面

要带有返回值startActivityForResult(intent);

额外:一键锁屏的两个界面

添加两个Activity主入口就可以了

但是需要给另一个界面单独开启进程

在activity中 属性

process = “:process.sub”

启动模式:launchMode = “singleInstance”

时间: 2024-12-22 09:47:37

手机卫士04_ 手机定位_超级管理员_数据库的相关文章

手机卫士10_widget_流量统计_手机杀毒

1._widget入门: 查看帮助文档>>Developrs>>API Guides>>App Widgets 实际上是一个迷你的应用程序VIew视图,嵌入在另外一个应用程序视图. 标准的android和兼容widget的手机才能显示,被修改过的系统是无法显示的. 实现步骤: ①创建类继承APPWidgetProvider//一个方便的帮助类,用来实现一个appwidget 它继承了广播接收者,实现原理也是通过广播实现的,特殊的广播接收者. ②在清单文件里配置广播接收者

手机卫士13_屏幕适配_异常处理_盈利模式_混淆加密

今天是手机卫士最后一天 1,简易屏幕适配: ①使用线性,相对,帧布局,这三种常用布局在所有设备上几乎可以完整实现,多使用dp,sp,不要使用像素,dp,sp会自动适应屏幕 ②浮动窗体显示的距离问题:它show出来的距离就是像素,所以显示距离不会适应屏幕. 代码里接收的单位一般都是像素. 解决方式:把输入的数字转换成dp单位. 得到像素密度*像素 获得dp数据,根据屏幕实现的像素效果 通过工具类去转换成dp数据DesityUtils 2,应用程序的异常处理: 2.1 alpha版本:小范围的内部测

Android核心基础(手机卫士的一个知识点总结)

注意:有些功能是需要权限的,在这里并没有写出来,在程序运行中,根据程序报的错误,添加相应的权限即可,里面的具体里面可能有一些小细节,没有明确的写出来,具体的需要在程序中自己调试,解决. 这个总结涵盖了Android的一些核心的内容,如四大组建Service.ContentProvider.BroadCastReceiver.Activity,而且四大组建都必须在清单文件中注册. 还涉及了Android手机底层的一些功能,如读取联系人.短信等.还有一些看似牛别点技术,什么短息拦截,电话拦截,黑名单

360手机卫士插件化RePlugin今日开源

写在前面 "RePlugin将在6月底开源,这将是我们献给安卓世界最好的礼物."当我们宣布这一消息时,心中的激动,无以言表.是的,三年的"厚积",如今的"薄发",看似平凡的话,实际上却饱含了我们太多的激动.辛酸与泪. 那么今天,我们就来详细的和您聊一聊,这个从2014年中旬,正式在手机卫士上启用,并即将开源的360 RePlugin,究竟能为我们,更为您能带来什么. GitHub地址:https://github.com/Qihoo360/ReP

手机卫士01

开题:手机卫士这样的一个项目可以很好的复习基础所学的知识点,因为它覆盖面广,用来做安卓深入学习是一个很好的选择. 1,开始一个项目 写一个好的代码不仅是看功能是否实现,而且代码具有较高的可读性 1.1 代码组织方式: ①采用业务逻辑模块组织代码,以小米阅读为例: 功能一:阅读器reader com.xiaomi.reader 功能二:分享 share com.xiaomi.share 功能三:便签 note com.xiaomi.note 按功能划分包,即使一部分功能被移除了,另外的功能也不会受

手机卫士-11

手机卫士-11 课1 看门狗WatchDogService程序优化 程序锁不断打开关闭打开关闭,有时还是有界面没及时切换过来 有一瞬间还看见程序的界面,隐私还是保护得不够好 原因是看门狗里WatchDogService.java里死循环,整个死循环的周期有一定的事件,所以会产生多次打开程序锁而界面没切换过来 那是因为应用程序还不够优化 //该标志符用来控制是否不断刷新 flag = true; new Thread() { //其实该service所做的事件就是创建一个死循环,不断查看tempS

手机卫士 笔记

1. BroadcastReceiver 广播接受者 每次广播到来时 , 会重新创建 BroadcastReceiver 对象 , 并且调用 onReceive() 方法 , 执行完以后 , 该对象即被销毁 . 当 onReceive() 方法在 10 秒内没有执行完毕, Android 会认为该程序无响应 . 所以在BroadcastReceiver 里不能做一些比较耗时的操作 , 否侧会弹出 ANR(Application NoResponse) 的对话框 .如果需要完成一项比较耗时的工作

手机卫士

Day1 上午: 第一节:01_项目介绍(20分钟).02_svn服务器的使用(20分钟).03_代码组织结构(10分钟).04.Splash界面的UI(20分钟) 第二节:04_连接服务器获取更新信息(50分钟) 第三节:05_应用程序的签名(30分钟). 下午: 第四节07_splash界面的细节(6分钟).08_两种上下文的区别(8分钟).09_应用程序的主页面(15分钟).10_自定义可以滚动的TextView(10分钟) 第五节:11_自动更新的组合控件(50分钟) 第六节:12_自定

手机卫士-05

手机卫士-05 课1 模仿网易新闻下拉加载分页数据listView 在activtiycallsafe.xml里重新修改(去掉原来的button) activtiycallsafe.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:l