当外来电话打过来的时候需要实施的显示,打进来的号码的归属地,首先创建一个文本框让用户自己选择服务是否开启,同时在逻辑中进行设置,监听勾选框根据服务的状态来选择是否勾选(防止用户自己关闭服务,导致状态和勾选框不一致的现象)。

要监听服务的状态,首先需要创建一个服务的监听,判断系统的开启的服务有哪些,判断某一个服务是否在开启的服务中,根据返回值来设置勾选框。

布局显示如下

首先清单文件中注册一个服务

<service android:name="com.ldw.safe.service.AddressService"></service>

服务状态的监听ServiceStatusUtils.java

package com.ldw.safe.utils;import java.util.List;import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.content.Context;/** 服务状态的工具类*/
public class ServiceStatusUtils {/** 检测服务是否运行*/public static boolean isServiceRunning(Context ctx, String serviceName){//利用context获取到系统的服务ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);//获取到正在运行的服务,100是返回服务的最大值List<RunningServiceInfo> runningService = am.getRunningServices(100);//遍历服务for(RunningServiceInfo runningServiceInfo:runningService){//获取服务的名字String className = runningServiceInfo.service.getClassName();//System.out.println(className);//判断系统里面有没有这个服务,有这个服务就返回trueif(className.equals(serviceName)){return true;}}return false;}
}

设置页面布局文件activity_setting.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:ldw="http://schemas.android.com/apk/res/com.ldw.safe"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextView style="@style/TitleStyle"android:text="手机设置"/><com.ldw.safe.view.SettingItemViewandroid:id="@+id/siv_update"android:layout_width="match_parent"android:layout_height="wrap_content"ldw:title="自动更新设置"ldw:desc_on="自动更新已开启"ldw:desc_off="自动更新已关闭"/><com.ldw.safe.view.SettingItemViewandroid:id="@+id/siv_address"android:layout_width="match_parent"android:layout_height="wrap_content"ldw:title="电话归属地显示设置"ldw:desc_on="电话归属地显示已开启"ldw:desc_off="电话归属地显示已关闭"/>
</LinearLayout>

设置的逻辑文件SettingActivity.java

package com.ldw.safe.Activity;import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;import com.ldw.safe.R;
import com.ldw.safe.service.AddressService;
import com.ldw.safe.utils.ServiceStatusUtils;
import com.ldw.safe.view.SettingItemView;/*** 设置中心*/
public class SettingActivity extends Activity {private SettingItemView siv_update;//设置自动更新private SettingItemView siv_address;//归属地private SharedPreferences mPref;//把设置的数据保存在mPref@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_setting);//把设置的数据保存在mPrefmPref = getSharedPreferences("config", MODE_PRIVATE);initUpdateView();//初始化自动升级开关initAdressView();//初始化归属地开关}/** 初始化自动升级开关*/private void initUpdateView(){siv_update = (SettingItemView)findViewById(R.id.siv_update);//siv_update.setTitle("自动更新设置");//获取保存的数据,判断之前选择的是开始还是关闭,初始化进入界面是否勾选boolean autoUpdate = mPref.getBoolean("auto_update", true);if(autoUpdate){siv_update.setDesc("自动更新已经开启");siv_update.setChecked(true);}else{siv_update.setDesc("自动更新已经关闭");siv_update.setChecked(false);}siv_update.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//判断右边框的勾选状态if(siv_update.isChecked()){//设置不勾选siv_update.setChecked(false);//siv_update.setDesc("自动更新已经关闭");//编辑mPref的值mPref.edit().putBoolean("auto_update", false).commit();}else{//设置勾选siv_update.setChecked(true);//siv_update.setDesc("自动更新已经开启");//编辑mPref的值mPref.edit().putBoolean("auto_update", true).commit();}}});}/** 初始化归属地开关*/private void initAdressView(){siv_address = (SettingItemView) findViewById(R.id.siv_address);//判断归属地的服务是否在运行boolean serviceRunning = ServiceStatusUtils.isServiceRunning(this, "com.ldw.safe.service.AddressService");//让服务的那个勾选框根据系统中是否有服务来判断是否去开启if(serviceRunning){siv_address.setChecked(true);}else{siv_address.setChecked(false);}siv_address.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {if(siv_address.isChecked()){siv_address.setChecked(false);stopService(new Intent(SettingActivity.this, AddressService.class));}else{siv_address.setChecked(true);//号码归属地显示开启的时候要开启服务startService(new Intent(SettingActivity.this, AddressService.class));}}});}
}

来电归显示属地的服务AddressService.java

package com.ldw.safe.service;import com.ldw.safe.db.dao.AddressDao;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;/** 来电提醒的服务*/
public class AddressService extends Service {private TelephonyManager tm;private MyListener listener;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate(){super.onCreate();tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);listener = new MyListener();tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);//监听打电话的状态}class MyListener extends PhoneStateListener{//监听电话状态的变化@Overridepublic void onCallStateChanged(int state, String incomingNumber){//switch(state){//电话铃声响起case TelephonyManager.CALL_STATE_RINGING:System.out.println("CALL_STATE_RINGING");//获取来电的号码归属地String address = AddressDao.getAddress(incomingNumber);Toast.makeText(AddressService.this, address, Toast.LENGTH_LONG).show();break;default:break;}super.onCallStateChanged(state, incomingNumber);}}@Overridepublic void onDestroy(){super.onDestroy();//关闭服务,停止来电监听tm.listen(listener, PhoneStateListener.LISTEN_NONE);}}

100.s1-来电归属地的显示相关推荐

  1. Android 来电归属地显示功能demo

    2019独角兽企业重金招聘Python工程师标准>>> 需求:打进电话,用Toast显示来电归属地(注:说明系统的拨号不能改) 第一步:创建后台监听来电服务AddressServic ...

  2. sony lt26i android 5.1rom,索尼 LT26 Xperia L 5.1.1 ROM刷机包 扁平化 来电归属 农历 新相机 稳定流畅...

    ROM 介绍 ROM信息 ROM名称:Xperia L ROM版本:5.1.1 机型:lt26i(xperia s),ii不知道行不行没条件测试 注意事项 1.请更新最新版的recovery刷机以免卡 ...

  3. android来电归属地提醒

    现在市面上常用的一些拨号软件的一个功能,来电归属地.拨号的时候,会在拨号界面出现一个号码归属地的小框框.效果如下:而且这个小窗体还可以自定义风格,并且可以自由移动.这里大概讲下实现的过程. 这个小框框 ...

  4. 来电归属地java_来电归属地数据查询Java实现

    项目需要实现来电归属地查询,所以就找到了下面这个文章 原理主要在(一)和(二)中,作者的数据压缩思路很给力,将6M的原始文本数据压缩到400kb左右,原作者已经将分析讲的很清楚了,这里提炼一下要点,并 ...

  5. iOS 8 Beta 2加入来电归属地功能

    [IT168 资讯]距离推出iOS 8开发者版仅两周,苹果公司现在正式向广大开发者发布了iOS 8系统的第二个测试版beta 2,编译版本号为12A4297e.除了修复了beta版本此前出现的一些BU ...

  6. iOS 8 beta 2发布:新增来电归属地功能

    新浪手机讯 6月18日上午消息,苹果公司今天发布了iOS 8系统第二个测试版(beta 2),修复了部分bug,在细微功能上做了一些改进,整体感觉运行速度更快,另外,增加了来电归属地功能. Podca ...

  7. 21、高级工具--来电归属地提示框的位置设置

    创建设置提示框位置的activity:DragViewActivity以及布局文件. 代码: package com.example.mobilesafe;import android.app.Act ...

  8. Java黑皮书课后题第7章:*7.7(统计个位数的数目)编写一个程序,生成0和9之间的100个随机整数,然后显示每一个数出现的次数

    *7.7(统计个位数的数目)编写一个程序,生成0和9之间的100个随机整数,然后显示每一个数出现的次数 题目 题目描述 破题 代码 运行示例 题目 题目描述 *7.7(统计个位数的数目)编写一个程序, ...

  9. 【PHP基础题】打印出100以内的质数,一行显示5个。(质数是只能被1跟它本身整除的数。1不是质数)

    isPrimeNum(100, 5); /*** 打印出100以内的质数,一行显示5个.* @param [type] $num 范围数* @param [type] $m 每行显示的个数*/ fun ...

最新文章

  1. 天猫php采集列表,QueryList: QueryList是一个基于phpQuery的通用列表采集类,是一个简单、 灵活、强大的采集工具,采集任何复杂的页面 基本上就一句话就能搞定了。...
  2. 利用Web Services实现软件自动升级
  3. 【C++】Visual Studio教程(六) -更新Visual Studio
  4. 关于Zipalign的介绍和使用方法
  5. AtCoder Regular Contest 065
  6. H3C 计算子网内可用主机地址数
  7. leetcode24题:两两交换链表的节点
  8. 推荐系统--收藏起来慢慢研究
  9. CVPR2022 | 利用域自适应思想,北大、字节跳动提出新型弱监督物体定位框架
  10. SQL课堂笔记--索引和视图
  11. linux c程序中判断能不能ping,用C/C++代码检测ip能否ping通(配合awk和system可以做到批量检测)...
  12. MySQL 的 MRR 到底是什么?
  13. 22. 案例:在 proxy 内网环境下使用 percona 监控 mysql
  14. Python宣传自己很快的orjson真的比ujson快吗(orjson与ujson速度比较)
  15. 【入坑Java第二天】
  16. L1-031 到底是不是太胖了 (10分)
  17. c/c++环境下YOLO4的配置和试运行
  18. 简单实用BOM管理系统,树形结构,一目了然BOM管理系统,集成ERP的BOM管理系统 BOM集成SAP 快速上线BOM管理系统 目视化BOM管理系统
  19. matlab 微分方程组参数拟合,matlab拟合微分方程组中的参数
  20. 如何创建你的SOLIDWORKS ID?

热门文章

  1. msfvenom制作windows/linux/android/ios木马
  2. 清华张长水教授:系统了解图像识别与机器学习
  3. ADsafe净网大师配置白名单
  4. php获取当前URL地址
  5. Docker daemon 配置和故障排除
  6. 像外行一样思考,像专家一样实践(读书笔记)
  7. 即时通讯云服务·融云开发者沙龙活动(10月份)公告
  8. ffmpeg.dll丢失怎么办-ffmpeg.dll修复工具下载
  9. 基金里投资风险指标的计算工具类(夏普比率,波动率,Var值,最大回撤率)
  10. 计算机视觉数据集大全 - Part2