手机卫士03_手势动作_广播接收者应用

//在控件上面按ctrl+1 可以抽取样式

1,设置向导界面的细节问题

1.1设置向导界面的跳转的时候要记得finsh(),把当前界面从任务栈中移除.

在设置向导界面的任何一个界面返回都应该返回home界面

1.2 Activity界面切换的动画

目标:本界面向左移出了屏幕,下一个界面从右边移出来(类似翻页效果)

ovreridePendingTransition(进入动画文件资源id,退出动画文件资源id);

//这个方法在startActivity,或finsh()后调用,可以更改动画变化的效果

下一步的动画

1.2.1 创建两个动画效果的资源文件,需要翻页效果(类似位移动画)

持续时间duration=300毫秒

进入的动画:fromXDelta(100%p)//从屏幕最右边的X坐标开始

toXDelta(0)//到坐标轴为0为止.

移出的动画:fronXDelta(0)>>>toXDelta(-100%p)

//手机屏幕的原点在屏幕的左上角

同理可以做出上一步的动画.

2,手势识别动作:因为点击按钮用户体验不太好,对触摸屏添加手机识别动作

2.1 重写父类方法onTouchEvent(Motionevent event) //当用户手指在屏幕上触摸的时候调用.

通过GestureDetector mgesturedetector;手势识别器

2.2

mgesturedetector=new mgesturedetector(this,new GestureDetector.simpOnGestureListener());

new GestureDetector.simpOnGestureListener()//简单的手势识别器,有很多手势识别效果

这里主要关心onFling(MotionEvent e1 MotionEvent e2,float velocityX,float velocityY)方法

e1,手指第一次触摸到屏幕事件,e2,手指离开屏幕一瞬间对应的事件

velocityX 水平方向的速度,velocityY垂直方向的速度 单位:像素/秒

// 这里主要关心水平方向的速度(因为是翻页操作)

If(Math.abs(velocityX)<200){ //绝对值

低于200的速度不考虑

Return true;//代表事件在这里终止了

}

//竖直方向移动距离太大也无效,因为要的是横向操作,而不是斜向操作

Math.abs(e2.getRawY()-e1.getRawY()>50)//竖直方向如果大于50就无效.

//向右X轴为正,向下Y轴为正

//当横向滑动距离大于200的时候就显示下一个界面,小于-200就切换上一个界面.

//记得也要return true;

或者e2-e1,e1-e2

2.3 在onTouchEvent()方法中

mGestureDetector.onTouchEvent(event); //让手势识别器识别传入的动作

3.重构代码的抽取模板

3.1 4个设置向导界面功能类似,所以可以抽取一个父类来让它们去继承.这个父类也要去继承activiy(形成家族关系树)

①抽取的命名方式XXXBaseActivity.class

②把滑屏移动的代码移植到这个父类中.

③跳转页面的class不同

在父类中定义两个抽象方法,子类去强制继承,子类继承的时候就直接在里面写页面跳转逻辑.最后父类在滑动翻页的事件中调用这两个方法即可.

3.2 继续抽取设置向导界面的逻辑

①把子类中跳转页面的代码抽取出来.

在子类中点击事件中直接调用这个方法即可(因为已经强制重写了页面跳转代码)

②抽取SharedPrenferences在父类中,在子类中就可以直接使用了.

③抽取intent开启上一个方法(参数只需要开启的界面class即可)和下一个方法.

3.3 手机防盗界面的重新进入设置向导点击事件

添加一个状态选择器(背景);

添加属性Clickable=”true”  //可以被点击,这样状态就能生效

然后通过intent开启设置向导界面,这里需要 finsh() 一下.

4.绑定用户手机卡.

4.1.找到绑定,解绑的控件,设置点击事件.

①判断sim卡的绑定信息,默认设置为null即可,然后判断是否为null,

②根据是否为null,修改图片状态.

③如果需要绑定,就把sim卡串号存入sim卡中

记得加权限:READ_PHONE_STATE

sim卡信息属于手机电话状态的信息,通过TelephonyManager服务管理可以获取设备上电话管理的服务,不要直接new,通过getSystemService(TelephonyManager)获取/

拿到sim卡串号,telephonymanager,getSimSerialNumber();//获取sim卡串号

然后保存在sp中

④如果取消绑定,就把sim卡串号清空.

储存信息为null即可.

额外:①在cmd ,通过adb shell>>cd 包路径>>cd shared_prefs>>cat config.xml 查看文件内容.

②记得在跳转页面的时候,到这个页面初始化的时候获取一下状态,设置图片状态.

③绑定用户的sim卡是实现手机防盗的必须操作,在去下一个界面之前,判断一下sim卡是否被绑定,没绑定就提示绑定,绑定了之后才能去下一个界面.

5,选择联系人

设置安全号码,要设置一个安全号码,除了用户直接输入外,应该还可以通过联系人选择.

①通过内容提供者获取联系人列表.

把以前的联系人工具类拷贝来.(拷贝对应的业务bean,在utils包下创建一个domain包)

②记得加权限,READ_CONTACTS

③点击选择联系人的时候,就跳转到一个新的页面.配置好清单文件和layout文件.

StartActivityForResult(intent,请求码);//打开一个界面并获取结果

④新的页面用来显示所有用户(ListView)姓名和电话号码即可.

⑤设置条目点击事件,点击之后,就把联系人手机号放到意图对象里,设置结果数据setResult(结果码,意图对象),最后关闭当前界面

⑥在设置向导界面,获取到返回的数据onActivityResult()里获取意图对象中的数据

⑦把获取的字符串显示在输入框里,在点击下一页的时候的保存在sp中.如果这个页面被重新打开,也要把sp中的号码读取出来,显示在页面上.

⑧安全号码也是必须设置的,如果要进行下一步,就必须设置安全号码.

6,手机防盗的全部功能

①联系人太多,获取时间太长的情况.

所以需要把获取联系人放到子线程了,放到子线程之后,设置适配器是设置ui.在子线程中设置ui需要通过Handler发送到主线程.这里用另外一种方法

runOnUiThread(new runable(){更改ui的操作放到run方法里});//底层用的handler.post()

②在获取到联系人列表之前的提醒

在联系人列表的LIstView上包裹一个FrameLayout,放置一个LinearLayout,在ll中放一个文本,提示正在加载中.还可以放一个ProgressBar等待框.

在ll中定义visibility=”invisible”//显示可见

然后在开始获取联系人之前显示出来,获取完联系人就隐藏掉.

7.第四个设置向导界面

记录下防盗保护的id即可.//记得回显状态,默认未开启.

8,手机防盗界面,显示安全号码,防盗保护的状态.

9,手机防盗的核心原理:sim卡绑定,监测sim卡的变化.一旦变化就发送短信,播放音乐等.

9.1 监测sim卡变化,安卓更换sim卡要重启手机,代表需要一个开机启动的广播接收者.

①创建一个新的包ui.receiver,创建广播接收者,创建意图过滤器.

②意图过滤器:action:BOOT_COMPLETED

③配置权限:RECEIVE_BOOT_COMPLETED

④在广播接收者中,判断是否开启了手机防盗功能,从sp中获取信息

获取sim卡串号信息,与当前手机的sim卡串号信息比较

sim卡信息不一致,获取保存的安全号码.

发送短信:SmsManager smsManager = SmsManager.getDefault();

smsManager.sendTextMessage(safenumber,null,”信息”,null,null(是否提示));

//这里发送的短信的手机号码是小偷的手机号码.

配置权限.

⑤模拟器的sim卡串号是永远一致的,

10,防盗指令的解析(就是手机防盗界面的那几个功能,通过安全号码发送短信.解析短信内容)

①定义一个手机短信广播接收者,配置清单文件

意图过滤器:action:android:name=””//在sdk 的开发版本选择最低就可以看到这个action.然后再换回来即可同时配置优先级priority=1000最高权限

配置接收短信的权限android.permission.RECEIVE_SMS

②接收短信

Object[] objs = (Object[])intent.getExtras().get(“pdus”);

SmsMessage msg= SmsMessage.createFormPdu((byte[])obj);

遍历数组,每一个元素都是SmsMessage, smsmessage.getMessageBody()//获取短信体

abordCast()//终止短信

然后对短信体跟定义的指令进行判断

Location:获取手机的位置

Alarm:播放报警音乐

Wipedata:立刻清楚数据

Lockscreen:锁屏

11,播放报警音乐的功能:

应用场景:获取到了手机位置的时候,到这个位置去听播放的声音.

Mediaplayer = mediaplayer.create(上下文,音频资源id)//会自动创建对象+prepare

调用start()开始播放,资源文件放到raw文件夹下.setLooping()//循环播放

//就算手机静音,多媒体也是可以播放出声音的,但是用户再次调节音量是可以关闭的

时间: 2024-11-03 21:50:54

手机卫士03_手势动作_广播接收者应用的相关文章

手机卫士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版本:小范围的内部测

手机卫士07_自定义吐司_桌面小火箭_短信备份_接口和回调_应用程序信息,

1,自定义吐司显示风格 ①创建一个布局文件(代码注册的View看不出效果,所以还是定义布局文件比较好) 这里的背景是.9图片会根据包裹内容来拉伸 ②在显示自定义吐司的界面,显示的吐司通过View.inflate()创建 ③在设置中心增加一条修改归属地显示风格. {"半透明","活力橙","卫士蓝","金属灰","苹果绿"}; 点击之后弹出一个单选对话框. builder.setSingleChoiceIte

手机卫士06_挂电话拦截短信,资产目录_来电去电_自定义吐司

1.1 反射调用系统隐藏api挂掉电话 Android 1.5之前可以通过 TelephonyManager,tm.endCall();//但是列表找不到 谷歌认为挂掉电话是危及手机根本功能的动作,所以隐藏了这个api 在1.5之后,要通过反射调用这一api才能实现 两个网站 ①www.greocide.com //搜索源码的网站 搜索TelephonyManager,查找版本最低的版本即可(越低越容易理解) 这个api被隐藏掉了,不能直接获取到TelephonyManager.对象. ②通过g

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

1.1 定位功能简介: 常见的定位方式: ①网络定位:(IP地址),拨号上网一般是动态分配,如果网吧公司,就是静态分配的. 比较有名的数据库:纯真Ip数据库,有很多公开的ip信息 根据ip地址定位.可能很准确,也可能只是一个大概的范围 ②基站定位:必须有手机卡才能基站定位 根据手机与基站联系的信号强弱+算法定位. 定位效果:可能很准确,(与基站位置相关,周围基站越多越近效果越好.) ③GPS定位:采用卫星定位 利用卫星的位置与手机GPS模块的建立联系,通过算法判断位置. 至少需要三颗卫星,获取手

手机卫士-10

手机卫士-10 课1 窗口小部件widget widget是什么? 阅读文档doc develop--->API Guides---->App Widgets linux命令ps:查看进程 kill+进程pid:杀掉进程 窗口小部件widget使用方法 创建widget测试 依照文档实现窗口小部件widget 创建widget窗口小部件的步骤 1.创建一个新的实现类:父类是AppWidgetProvider //1.写一个类继承 AppWidgetProvider //因为这个类是一个广播接收

手机卫士

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_自定

手机卫士-09

手机卫士-09 课1 回顾高级工具的短信备份 ToolsActivity.java(前台界面) smsBackupparser.java(后台逻辑) 备份短信是一个很耗时的操作,可能需要很长的时间 修改activity_tool.xml的进度条progressBar <!-- <ProgressBar android:id="@+id/pb" style="?android:attr/progressBarStyleHorizontal" android

手机卫士12_软件锁,应用程序相关

1,软件锁(功能描述:当软件处于以加锁的列表中时,打开这个软件会跳转到密码输入界面,输入正确会跳转到软件界面,否则密码错误) ①ui参考 不使用fragment,采用布局叠加隐藏,点击一个文本,就显示一个界面(列表ListView),另一个布局界面隐藏起来(frameLayout帧布局实现). ②程序未加锁界面的展现 找到所有关心的控件,默认把所有的应用程序未加锁界面列表中. 参考条目ui 额外:加锁的小图标带有状态选择器,点击变换图片 横线可以考虑加个宽度为1的imageView; ③点击条目