Android中来电号码归属地的显示
昨日实现了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中来电号码归属地的显示相关推荐
- 37来电号码归属地的显示
我们使用服务监听电话. 在设置中心添加是否设置来电号码归属地的服务: <com.ustc.mobilemanager.ui.SettingItemViewowndefine:title=&quo ...
- android 浮动文字提示,怎么在Android中实现一个自由拖动并显示文字的悬浮框
怎么在Android中实现一个自由拖动并显示文字的悬浮框 发布时间:2021-01-27 15:34:05 来源:亿速云 阅读:107 作者:Leah 今天就跟大家聊聊有关怎么在Android中实现一 ...
- Java乔晓松-android中调用系统拍照功能并显示拍照的图片
android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...
- android seekbar 背景颜色,Android中自定义SeekBar如何实现分段显示不同背景颜色
Android中自定义SeekBar如何实现分段显示不同背景颜色 发布时间:2020-07-17 16:04:27 来源:亿速云 阅读:197 作者:小猪 这篇文章主要讲解了Android中自定义Se ...
- android 改变来电号码,Android8.1 MTK平台 Dialer修改(来电全屏、归属地显示)
来电默认全屏 默认情况下,来电android是以通知窗口的形式显示,只在屏幕的顶部显示,现在改为全屏显示 修改位置 alps\vendor\mediatek\proprietary\packages\ ...
- Android设置来电号码归属地
FAQ Content [DESCRIPTION] 如何关闭MTK内置来电号码归属地? [SOLUTION] MTK平台号码归属地分为两种:1.手机号码归属地:2.固话号码归属地: 手机号码归 ...
- Android Studio之号码归属地查询(Webservice)
1.准备工作 (1)下载ksoap2-android-assembly-xxx-jar-with-dependencies.jar包 下载地址: Index of /repositories/ksoa ...
- android来电电话获取,Android获取来电号码代码
对于Android平台的整个来电软件制作十分简单,Android平台在各方面都比较智能,加上一个BOOT_COMPLETED获取,保证开机自动运行,一个来电通就很容易的制作完成了. Android来电 ...
- [android] 手机卫士号码归属地查询
使用小米号码归属地数据库,有两张表data1和data2 先查询data1表,把手机号码截取前7位 select outkey from data1 where id="前七位手机号&quo ...
最新文章
- 无人驾驶——对frenet坐标的理解
- 全能音乐助手序列号_颜控最爱的全能本 惠普星14全能轻薄本深度解析
- 2021广西高考成绩几点可以查询,高考完多久分数能出来广西 2021年广西高考分数查询公布时间...
- illegal instruction错误
- linux重定向多个文件,Linux base shell重定向详解
- [BZOJ1643][Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪
- linux5.4无法远程,利用Xmanager_在RedHat5.4下实现Linux远程桌面
- 单片机设计时钟程序c语言,单片机电子时钟程序设计
- sql2000-2 4/19
- Java BigDecimal restder()方法与示例
- php 去除重复的值,php数组怎么去除重复值?
- Redis-数据结构06-快速链表(quicklist)
- Go语言-defer的使用
- Red5流媒体服务器的搭建
- 八类网线和七类网线的区别_七类网线和六类网线区别有哪些
- DirectX--给视频加马赛克、字符OSD
- 自媒体助手软件开发需具备哪些功能?
- Mac上备份iphone照片
- Git使用教程【一】
- 腾讯云双十一活动读解
热门文章
- Novavax和武田宣布在日本合作Novavax的COVID-19候选疫苗
- baq在聊天中啥意思,Epicor 10在BPM工作流设计器中链接BAQ(避免自定义代码)
- [POJ3384]Feng Shui(半平面交+凸包)
- java自定义标签库的开发
- uniapp进行交互反馈
- 深扒中国最神秘的百亿快时尚巨头SheIn
- HDU 1814(染色)
- python数据分析实战之信用卡违约风险预测
- 抽奖随机滚动_仅需2分钟,使用excel制作一个抽奖小工具,再也不用为抽奖发愁了...
- catia中画螺杆 螺纹