100.s1-来电归属地的显示
当外来电话打过来的时候需要实施的显示,打进来的号码的归属地,首先创建一个文本框让用户自己选择服务是否开启,同时在逻辑中进行设置,监听勾选框根据服务的状态来选择是否勾选(防止用户自己关闭服务,导致状态和勾选框不一致的现象)。
要监听服务的状态,首先需要创建一个服务的监听,判断系统的开启的服务有哪些,判断某一个服务是否在开启的服务中,根据返回值来设置勾选框。
布局显示如下
首先清单文件中注册一个服务
<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-来电归属地的显示相关推荐
- Android 来电归属地显示功能demo
2019独角兽企业重金招聘Python工程师标准>>> 需求:打进电话,用Toast显示来电归属地(注:说明系统的拨号不能改) 第一步:创建后台监听来电服务AddressServic ...
- 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刷机以免卡 ...
- android来电归属地提醒
现在市面上常用的一些拨号软件的一个功能,来电归属地.拨号的时候,会在拨号界面出现一个号码归属地的小框框.效果如下:而且这个小窗体还可以自定义风格,并且可以自由移动.这里大概讲下实现的过程. 这个小框框 ...
- 来电归属地java_来电归属地数据查询Java实现
项目需要实现来电归属地查询,所以就找到了下面这个文章 原理主要在(一)和(二)中,作者的数据压缩思路很给力,将6M的原始文本数据压缩到400kb左右,原作者已经将分析讲的很清楚了,这里提炼一下要点,并 ...
- iOS 8 Beta 2加入来电归属地功能
[IT168 资讯]距离推出iOS 8开发者版仅两周,苹果公司现在正式向广大开发者发布了iOS 8系统的第二个测试版beta 2,编译版本号为12A4297e.除了修复了beta版本此前出现的一些BU ...
- iOS 8 beta 2发布:新增来电归属地功能
新浪手机讯 6月18日上午消息,苹果公司今天发布了iOS 8系统第二个测试版(beta 2),修复了部分bug,在细微功能上做了一些改进,整体感觉运行速度更快,另外,增加了来电归属地功能. Podca ...
- 21、高级工具--来电归属地提示框的位置设置
创建设置提示框位置的activity:DragViewActivity以及布局文件. 代码: package com.example.mobilesafe;import android.app.Act ...
- Java黑皮书课后题第7章:*7.7(统计个位数的数目)编写一个程序,生成0和9之间的100个随机整数,然后显示每一个数出现的次数
*7.7(统计个位数的数目)编写一个程序,生成0和9之间的100个随机整数,然后显示每一个数出现的次数 题目 题目描述 破题 代码 运行示例 题目 题目描述 *7.7(统计个位数的数目)编写一个程序, ...
- 【PHP基础题】打印出100以内的质数,一行显示5个。(质数是只能被1跟它本身整除的数。1不是质数)
isPrimeNum(100, 5); /*** 打印出100以内的质数,一行显示5个.* @param [type] $num 范围数* @param [type] $m 每行显示的个数*/ fun ...
最新文章
- 天猫php采集列表,QueryList: QueryList是一个基于phpQuery的通用列表采集类,是一个简单、 灵活、强大的采集工具,采集任何复杂的页面 基本上就一句话就能搞定了。...
- 利用Web Services实现软件自动升级
- 【C++】Visual Studio教程(六) -更新Visual Studio
- 关于Zipalign的介绍和使用方法
- AtCoder Regular Contest 065
- H3C 计算子网内可用主机地址数
- leetcode24题:两两交换链表的节点
- 推荐系统--收藏起来慢慢研究
- CVPR2022 | 利用域自适应思想,北大、字节跳动提出新型弱监督物体定位框架
- SQL课堂笔记--索引和视图
- linux c程序中判断能不能ping,用C/C++代码检测ip能否ping通(配合awk和system可以做到批量检测)...
- MySQL 的 MRR 到底是什么?
- 22. 案例:在 proxy 内网环境下使用 percona 监控 mysql
- Python宣传自己很快的orjson真的比ujson快吗(orjson与ujson速度比较)
- 【入坑Java第二天】
- L1-031 到底是不是太胖了 (10分)
- c/c++环境下YOLO4的配置和试运行
- 简单实用BOM管理系统,树形结构,一目了然BOM管理系统,集成ERP的BOM管理系统 BOM集成SAP 快速上线BOM管理系统 目视化BOM管理系统
- matlab 微分方程组参数拟合,matlab拟合微分方程组中的参数
- 如何创建你的SOLIDWORKS ID?