




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、TJXUOJ 课程同步笔记RVNG 版By 编程,始于卫士-04Android 号码归属地查询()在功能列表中点击高级工具,就进入了的高级工具界面,该界面主要有号码归属地查询、备份、常用号码查询、程序锁等功能。那么本文档中需要实现的是号码归属地查询功能。号码归属地查询界面比较简单,如下图所示。1.1 高级工具、号码归属地查询 UI 的实现步骤: 、创建 GZUURYEGIZOOZ_ SR 布局文件 、编写 :UURYIZOOZ_ 类,同时在 TJXUOJ3GTOLKYZ SR 中该 IZOOZ_。public class AToolivity extendivity private Progr
2、essBar progressBar1;Overrideprotected void onCreate(Bundle savedInstane) super.onCreate(savedInstane);setContentView(R.layouools_activity);progressBar1 = (ProgressBar) findViewById(R.gressBar1);/ 号码归属地查询public void numberQuery(View view) entent = new ent(this, AddressQueryActivity.class);startActivi
3、ty(ent);/备份功能public void smsBackup(View view) final File file = new File(Environment.getExternalStorageDirectory(), smsbackup.xml);final ProgressBar progressBar = new ProgressBar(this);new Thread(new Runnable() Overridepublic void run() if(Environment.getExternalStorageSe().equals(Environment.MEDIA_
4、MOUNTED) SmsBackupUtil.smsBackup(AToolfile.getAbsolutePath(),progressBar1);ivity.this,Looprepare();ivity.this, 备份成功, 0).show();Toast.makeTexLooper.loop();ool).start();/打开常用号码查询界面public void commonNumberQuery(View view)entent = new ent(this, CommonNumberQueryActivity.class);startActivity(ent);/打开程序锁界
5、面public void entryAppLock(View view)entent = new ent(this, AppLockActivity.class);startActivity(ent); 、创建号码归属地查询的 TSHKXEGJJXKYYEWKX_EGIZOOZ_ SR 布局文件1.2 号码归属地查询代码实现实现号码归属地查询有多种方法,比如联网查询,通过可以调用互联网服务,还有就是将常用的号码前缀存放在数据库库,然后将该数据库保存在本地。在的文档中只演示如何从数据库中进行归属地的查询。为了演示,提供了一个号码号码归属地数据库 GJJXKYY JH。用 972OZK +VKXZ
6、 6XULKYYOUTGR 工具打开该数据库,截图如下。该数据库有两张表,JGZG 和 JGZG ,其中 JGZG 保存的是号码前缀和归属地。JGZG 保存的是地区信息和归属地。address.db 放到工程目录中的 assets 目录下。在 SplashActivity类中,该资源拷贝到.itheima.mobileSafe/files/address.db 中。拷贝代码如下:private void copyDB(String name) InputStream inputStream = null; FileOutputStream outputStream = null; try in
7、putStream = getAssets().open(name); File file = new File(getFilesDir(), name); if (file.exists() Toast.makeText(this, 数据已经初始化完成,return;outputStream = new FileOutputStream(file); len = -1;Toast.LENGTH_SHORT).show();byte buff = newbyte1024;while(len=inputStream.read(buff)!=-1)outputStream.write(buff,
8、0,len);inputStream.close(); outputStream.close(); catch (IOException e) e.prStackTrace();finallyif (inputStream!=null) try inputStream.close(); catch (IOException e) e.prStackTrace();if (outputStream!=null) try outputStream.close(); catch (IOException e) e.prStackTrace();在 IUS OZNKOSG SUHORK9GLK JH
9、JGU 包(如果没有该创建)下创建 JJXKYY7KX_*GU 类,在该类中实现对数据库的操作。代码如下:public class AddressQueryprivate sic String path = .itheima.mobileSafe/files/address.db;public sic String queryAddress(String number) if (number.length()=7) query(null);else tv_addressResult.setText();Overridepublic void beforeTextChanged(CharSequ
10、en, start, count, after) Overridepublic void afterTextChanged(Editable s) );/执行查询方法public void query(View view) String phone = et_phoneNumber.getText().toString();if (TextUtils.isEmpty(phone) Toast.makeText(this, 号码不能为空, Toast.LENGTH_SHORT).show();/如果号码为空,则抖动编辑框,抖动效果是在xml 文件中定义的Animation shake = Ani
11、mationUtils.loadAnimation(this, R.anim.shake); et_phoneNumber.startAnimation(shake);vibrator.vibrate(2000);return; else if (phone.length() 7) Toast.makeText(this, 号码至少为 7 位, Toast.LENGTH_SHORT).show(); Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); et_phoneNumber.startAnimation(
12、shake);return;String reg = 1345678d5,9$;if (!phone.matches(reg) Toast.makeText(this, 输入的号码不合法。, Toast.LENGTH_SHORT).show();Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);et_phoneNumber.startAnimation(shake);return;String address = AddressQuery.queryAddress(phone);Message msg = ne
13、w Message();msg.what = RESULT_OK;if (TextUtils.isEmpty(address) msg.obj = 对不起,没有查询到该号码; else msg.obj = address;handler.sendMessage(msg);在上面代码中当用户没有输入任何内容却要查询号码时,给了用户抖动编辑框的提示。这个抖动效果主要是通过动画实现的。代码很简单,只有如下的两行。需要在 GTOS 目录中创建 YNGQK SR 文件。文件目录结构如左图所示。YNGQK SR 文件如下:上面的代码中用到了 GTJXUOJ OTZKXVURGZUX 属性,该属性在这里代表
14、当前动画执行的次数,I_IRKE SR 文件如下:?xml verolator xmlns:android= HYPERLINK http:/s/ http:/s/apk/res/androidandroid:cycles=7 /Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); et_phoneNumber.startAnimation(shake); 、在代码中 OHXGZUX 对象 、获取 OHXGZUX 实例 、调用 OHXGZUX 的vibrate 方法,参数代表时长(毫秒)在上面代码中 OHXGZK
15、 方法有两种方法重载形式,第二种比较难理解,VGZZKXT 是一个数组,存放的是时长(毫秒),第二个参数代表从 VGZZKXT 数组的脚标位置开始依次数组中的时长。 来电号码归属地显示()打开卫士的设置中心,添加 条功能设置项,设置来电显示、设置来电归属地样式、设置归属地显示框位置。勾选上设置来电显示后当有拨打进来界面会显示归属地,该归属地显示在一个控件中,该控件可以拖动,并且在设置来电归属地样式中可以设置该控件的。效果图如下:vibrator.vibrate(500);/-1不重复,非-1为从pattern的指定下标开始重复long pattern = 100,200,100,200,50,
16、50;vibrator.vibrate(pattern, 1);vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);private Vibrator vibrator;效果()当用户输入某些内容不合法时可以通过效果来提示用户,那么效果怎么实现呢?步骤: 、在 TJXUOJ3GTOLKYZ SR 中添限 、编辑设置中心布局文件 YKZZOTMEGIZOOZ_ SRitheima:desc_off=itheima:desc_on= itheima:title=设置单注意:上面的布局文件我给出了所有的设置中心的布局内容,但是具体的代码实现
17、会在以后的文档中实现。在本文档中只实现来电号码归属地显示功能。 、创建 9KZZOTMIZOOZ_ 类,对应 YKZZOTMEGIZOOZ_ SR 布局文件。 、在类中来电显示控件 、在 UT)XKGZK 方法中,初始化 siv_showAddress 控件,同时判断来电显示服务是否已经开启,如果开启则将 INKIQHU 勾选上,否则不勾选。/获取设置来电显示控件siv_showAddress = (SettingItemView) findViewById(R.id.siv_showAddress);/获取来电显示服务是否开启running = ServiAddressService.cla
18、ss.getName();if (running) /如果开启则将checkbox 勾选上siv_showAddress.setChecked(true); else siv_showAddress.setChecked(false); 、创建用于判断服务是否启动的工具类 9KXOIK9ZGZY;ZOR,该类代码如下:public class ServiusUtil isRunning(Context context,String name)public sic/获取 ActivityManager 对象ActivityManager activityManager = (ActivityMa
19、nager) context.getSystemService(Context.ACTIVITY_SERVICE);/通过 activityManager 对象获取正在运行的service,参数代表获取的最大个数List runningServi=activityManager.getRunningServi(100);for(RunningServiceInfo info : runningServi)System.out.prln(当前开启的服务有:+info.service.getCla标服务+name);ame()+-目/如果服务的名称等于指定的名称则代表服务正在运行if (info.
20、service.getClaame().equals(name) return true;return false;usUtil.isRunning(this,/设置来电显示private SettingItemView siv_showAddress; 、在 9KZZOTMIZOOZ_ 的UT)XKGZK 方法中给 showAddress 绑定点击事件。/来电显示服务意图showAddressent = new ent(this, AddressService.class);/给设置来电显示控件设置点击事件siv_showAddress.setOnClickListener(new OnCl
21、ickListener()Overridepublic void onClick(View v) if (siv_showAddress.isChecked() siv_showAddress.setChecked(false);stopServi else howAddressent);siv_showAddress.setChecked(true);/开启来电显示服务startServihowAddressent); 、编写 JJXKYY9KXOIK 类,在该类中实现了具体的归属地服务。 成员变量ephonyManager 对象/privateephonyManager tm;自定义的器类
22、继承了 API 的PhoneS/eListenerprivate MyPhoneSeListener listener; 编写 MyPhoneSeListener 类,继承 6NUTK9ZGZK2OYZKTKX 类class MyPhoneSeListener extends PhoneSeListener Overridepublic void onCallSeChanged(se, StringingNumber) super.onCallSeChanged(se,ingNumber);switch (se) caseephonyManager.CALL_SE_RINGING:/打进来了/
23、获取打进来的,然后查询归属地String address = AddressQuery.queryAddress(ingNumber);/显示归属地Toast.makeText(getApplicationContext(), address, 1).show(); myToast(address);break;被挂断了才空闲caseephonyManager.CALL_SE_IDLE:/if (view != null) wm.removeView(view); view = null;break; default:break;注意:上面的上面的 S 对象和 S_:UGYZ 方法用到了自定义吐司的知识,这块知识在下一个文档中会作详细的讲解。 、在 JJXKYY9KXOIK 类的UT)XKGZK 中实现。/获取ephonyManager 服务对象tm = (ephonyManager) getSystemService(EPHONY_SERVICE);/ 创建一个PhoneSeListener 对象listener= new MyPhoneSeListener()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度房屋租赁安全责任培训与实施合同
- 二零二五年度防火门消防安全培训与咨询服务合同
- 2025版二手房中介房屋买卖合同法律风险防范指南
- 2025房地产物业社区文化活动组织服务协议
- 2025年度智慧社区建筑工程合同终止及后续物业管理协议
- 2025版XX污水厂污泥资源化利用技术服务合同
- 2025版生态环保工程联营施工协议书范本
- 2026届山东省梁山县中考语文五模试卷含解析
- 湖北省黄冈市蕲春县2026届中考五模英语试题含答案
- 公司买卖协议书范本(2025版)
- 2025版土鸡蛋购销合同范本
- 2025年成都市三年级语文期末模拟试卷
- DMO合成及提纯工艺原理32课件
- 分娩知识的课件
- 基于物联网的地质勘察数据实时传输与管理研究-洞察及研究
- 文化遗产活化路径-第2篇-洞察及研究
- 企业读书分享会课件
- 休闲食品行业2025年发展预测:竞争格局与消费趋势研究报告
- 锐器伤和职业暴露课件
- 2025年中国养老产业商学研究报告-智慧养老产品专题【摘要】
- 膀胱结石的护理课件
评论
0/150
提交评论