昨日实现了360手机卫士的来电显示归属地的功能,具体的功能就是当来电的时候,界面会弹出来一个自定义的土司,显示当前号码的归属地,学习之后发现操作非常的简单,总结下加强自己的回忆。

具体细节大概为:别人打电话过来--->手机状态改变---->WindowManage监听到了改变,获得来电手机号查询地址----->在自定义的吐司上面显示出来。

下面是具体的代码实现:

AddressService服务类:

package com.itheima.mobilesafe.service;import com.itheima.mobilesafe.R;
import com.itheima.mobilesafe.db.dao.AddressDao;
import com.itheima.mobilesafe.receiver.OutCallReceiver;import android.app.ActionBar.LayoutParams;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.TextureView;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;public class AddressService extends Service {private TelephonyManager tm;private MyListenerPhone listener;private BroadcastReceiver receiver;private WindowManager wm;private View view;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);listener = new MyListenerPhone();tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);wm = (WindowManager) getSystemService(WINDOW_SERVICE);receiver = new OutCallReceiver();IntentFilter filter = new IntentFilter();filter.addAction("android.intent.action.NEW_OUTGOING_CALL");      registerReceiver(receiver, filter);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();tm.listen(listener, PhoneStateListener.LISTEN_NONE);listener = null;unregisterReceiver(receiver);receiver = null;}class MyListenerPhone extends PhoneStateListener {@Overridepublic void onCallStateChanged(int state, String incomingNumber) {// TODO Auto-generated method stubsuper.onCallStateChanged(state, incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_RINGING:String address = AddressDao.getAddress(incomingNumber);showMyToast(address);break;case TelephonyManager.CALL_STATE_IDLE:if(view!=null) {wm.removeView(view);view = null;}default:break;}}}public void showMyToast(String address) {int[] ids = {R.drawable.call_locate_white,R.drawable.call_locate_orange,R.drawable.call_locate_blue,R.drawable.call_locate_gray,R.drawable.call_locate_green};SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);int which = sp.getInt("which", 1);view = View.inflate(this, R.layout.address_show, null);TextView textView = (TextView) view.findViewById(R.id.tv_address);textView.setText(address);view.setBackgroundResource(ids[which]);WindowManager.LayoutParams params = new WindowManager.LayoutParams();params.height = WindowManager.LayoutParams.WRAP_CONTENT;params.width = WindowManager.LayoutParams.WRAP_CONTENT;params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;params.format = PixelFormat.TRANSLUCENT;params.type = WindowManager.LayoutParams.TYPE_TOAST;wm.addView(view, params);}}

1.写成服务是方便开启和关闭,而且可以长期后台运行,重写onCreat()和onDestroy()方法,开启和关闭的时候分别调用这两个方法,

2.在开启方法中,会获得WindowManage服务,然后调用他的listen(1,2)方法,参数1是一个监听器,继承PhoneStateListener,写状态改变时候的动作,参数2是要监听的种类,这里是STATE

3.自定显示土司的方法showMyToast(),方法里要调用wm的addView(1,2)方法,传view对象和参数细节params。

4.R.layout.XX找不到是因为导入了错的R包,要导入自己项目的R,不是系统中的R。

5.去电时候是用广播接收者接收广播进行差不多的处理,除了可以再清单中进行注册,还可以在服务中进行注册广播接收者,这样就可以动态的开启和关闭广播接收者:

<span style="white-space:pre">      </span>receiver = new OutCallReceiver();IntentFilter filter = new IntentFilter();filter.addAction("android.intent.action.NEW_OUTGOING_CALL");     registerReceiver(receiver, filter);

取消注册就用:

<span style="white-space:pre">      </span>unregisterReceiver(receiver);receiver = null;

Android中来电号码归属地的显示相关推荐

  1. 37来电号码归属地的显示

    我们使用服务监听电话. 在设置中心添加是否设置来电号码归属地的服务: <com.ustc.mobilemanager.ui.SettingItemViewowndefine:title=&quo ...

  2. android 浮动文字提示,怎么在Android中实现一个自由拖动并显示文字的悬浮框

    怎么在Android中实现一个自由拖动并显示文字的悬浮框 发布时间:2021-01-27 15:34:05 来源:亿速云 阅读:107 作者:Leah 今天就跟大家聊聊有关怎么在Android中实现一 ...

  3. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  4. android seekbar 背景颜色,Android中自定义SeekBar如何实现分段显示不同背景颜色

    Android中自定义SeekBar如何实现分段显示不同背景颜色 发布时间:2020-07-17 16:04:27 来源:亿速云 阅读:197 作者:小猪 这篇文章主要讲解了Android中自定义Se ...

  5. android 改变来电号码,Android8.1 MTK平台 Dialer修改(来电全屏、归属地显示)

    来电默认全屏 默认情况下,来电android是以通知窗口的形式显示,只在屏幕的顶部显示,现在改为全屏显示 修改位置 alps\vendor\mediatek\proprietary\packages\ ...

  6. Android设置来电号码归属地

    FAQ Content [DESCRIPTION] 如何关闭MTK内置来电号码归属地? [SOLUTION]   MTK平台号码归属地分为两种:1.手机号码归属地:2.固话号码归属地:   手机号码归 ...

  7. Android Studio之号码归属地查询(Webservice)

    1.准备工作 (1)下载ksoap2-android-assembly-xxx-jar-with-dependencies.jar包 下载地址: Index of /repositories/ksoa ...

  8. android来电电话获取,Android获取来电号码代码

    对于Android平台的整个来电软件制作十分简单,Android平台在各方面都比较智能,加上一个BOOT_COMPLETED获取,保证开机自动运行,一个来电通就很容易的制作完成了. Android来电 ...

  9. [android] 手机卫士号码归属地查询

    使用小米号码归属地数据库,有两张表data1和data2 先查询data1表,把手机号码截取前7位 select outkey from data1 where id="前七位手机号&quo ...

最新文章

  1. 无人驾驶——对frenet坐标的理解
  2. 全能音乐助手序列号_颜控最爱的全能本 惠普星14全能轻薄本深度解析
  3. 2021广西高考成绩几点可以查询,高考完多久分数能出来广西 2021年广西高考分数查询公布时间...
  4. illegal instruction错误
  5. linux重定向多个文件,Linux base shell重定向详解
  6. [BZOJ1643][Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪
  7. linux5.4无法远程,利用Xmanager_在RedHat5.4下实现Linux远程桌面
  8. 单片机设计时钟程序c语言,单片机电子时钟程序设计
  9. sql2000-2 4/19
  10. Java BigDecimal restder()方法与示例
  11. php 去除重复的值,php数组怎么去除重复值?
  12. Redis-数据结构06-快速链表(quicklist)
  13. Go语言-defer的使用
  14. Red5流媒体服务器的搭建
  15. 八类网线和七类网线的区别_七类网线和六类网线区别有哪些
  16. DirectX--给视频加马赛克、字符OSD
  17. 自媒体助手软件开发需具备哪些功能?
  18. Mac上备份iphone照片
  19. Git使用教程【一】
  20. 腾讯云双十一活动读解

热门文章

  1. Novavax和武田宣布在日本合作Novavax的COVID-19候选疫苗
  2. baq在聊天中啥意思,Epicor 10在BPM工作流设计器中链接BAQ(避免自定义代码)
  3. [POJ3384]Feng Shui(半平面交+凸包)
  4. java自定义标签库的开发
  5. uniapp进行交互反馈
  6. 深扒中国最神秘的百亿快时尚巨头SheIn
  7. HDU 1814(染色)
  8. python数据分析实战之信用卡违约风险预测
  9. 抽奖随机滚动_仅需2分钟,使用excel制作一个抽奖小工具,再也不用为抽奖发愁了...
  10. catia中画螺杆 螺纹