android项目手机卫士来电显示号码归属地
昨日实现了360手机卫士的来电显示归属地的功能,具体的功能就是当来电的时候,显示当前号码的归属地,学习之后发现操作
非常的简单,具体实现代码如下:
AddressService.java
package com.qingguow.mobilesafe.service; import com.qingguow.mobilesafe.utils.NumberQueryAddressUtil; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.widget.Toast; /** * 来电显示 * * @author taoshihan * */ public class AddressService extends Service { private TelephonyManager tm; private MyPhoneStateListener phoneStateListener; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } /** * 服务创建 */ @Override public void onCreate() { super.onCreate(); tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); phoneStateListener = new MyPhoneStateListener(); tm.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); } private class MyPhoneStateListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_RINGING: String info = NumberQueryAddressUtil .queryAddress(incomingNumber); Toast.makeText(getApplicationContext(), info, 1).show(); break; default: break; } } } /** * 服务销毁 */ @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); //取消监听 tm.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE); phoneStateListener=null; } }
设置中心,配置是否开启来电归属地显示
直接使用我们之前定义好的组合控件
<com.qingguow.mobilesafe.ui.SettingItemView tsh:title="设置显示号码归属地" tsh:desc_on="设置显示号码归属地已开启" tsh:desc_off="设置显示号码归属地已关闭" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/siv_show_address"> </com.qingguow.mobilesafe.ui.SettingItemView>
获取到SettingItemView对象,我们自定义的控件,设置状态
调用SettingItemView对象的setOnClickListener()方法,设置点击事件,重写onClick方法
调用SettingItemView对象的isChecked()方法,得到当前是否选中
判断状态,调用SettingItemView对象的setChecked()方法,设置状态,参数:布尔值
调用startService()方法,开启监听手机状态的服务,参数:Intent对象,
调用stopService()方法,关闭服务
判断当前服务是否开启,设置控件的默认选中状态
新建一个工具类ServicesUtils.java
定义一个静态方法isServiceRunning(),传入参数:Context上下文,String服务名
调用Context对象的getSystemService()方法,获取ActivityManager对象,参数:Context.ACTIVITY_SERVICE
调用ActivityManager对象的getRunningServices()方法,得到运行的服务List集合,参数:int最大值
for循环List集合,每条是个RunningServiceInfo对象
调用RunningServiceInfo.servie.getClassName(),获取到String服务类名,判断一下如果相等返回true
SettingActivity.java
package com.qingguow.mobilesafe; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import com.qingguow.mobilesafe.service.AddressService; import com.qingguow.mobilesafe.ui.SettingItemView; import com.qingguow.mobilesafe.utils.ServiceUtils; public class SettingActivity extends Activity { private SettingItemView siv_item; private SharedPreferences sp; // 设置是否开启号码归属地 private SettingItemView showAddressBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting); // 设置号码归属地 showAddressBtn = (SettingItemView) findViewById(R.id.siv_show_address); if (ServiceUtils.isRunningService(this, "com.qingguow.mobilesafe.service.AddressService")) { showAddressBtn.setChecked(true); } else { showAddressBtn.setChecked(false); } showAddressBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (showAddressBtn.isChecked()) { showAddressBtn.setChecked(false); stopService(new Intent(getApplicationContext(), AddressService.class)); } else { showAddressBtn.setChecked(true); startService(new Intent(getApplicationContext(), AddressService.class)); } } }); siv_item = (SettingItemView) findViewById(R.id.siv_item); sp = getSharedPreferences("config", MODE_PRIVATE); // 根据保存的数据设置状态 boolean update = sp.getBoolean("update", false); if (update) { siv_item.setChecked(true); } else { siv_item.setChecked(false); } // 自动更新的点击事件 siv_item.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Editor editor = sp.edit(); if (siv_item.isChecked()) { // 设置不选中 siv_item.setChecked(false); editor.putBoolean("update", false); } else { // 设置选中 siv_item.setChecked(true); editor.putBoolean("update", true); } editor.commit(); } }); } }
ServicesUtils.java
package com.qingguow.mobilesafe.utils; import java.util.List; import android.app.ActivityManager; import android.app.ActivityManager.RunningServiceInfo; import android.content.Context; /** * 服务工具类 * @author taoshihan * */ public class ServiceUtils { /** * 判断某服务是否开启 * @param context * @param serviceName * @return */ public static boolean isRunningService(Context context,String serviceName){ ActivityManager am=(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<RunningServiceInfo> infos=am.getRunningServices(100); for(RunningServiceInfo info:infos){ String name=info.service.getClassName(); if(name.equals(serviceName)){ return true; } } return false; } }
设置效果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- Android项目实战--手机卫士13--手机号码归属地的逻辑和数据库的压缩
- [android] 手机卫士来电显示号码归属地
- Android项目实战--手机卫士15--设置手机归属地的样式以及显示位置
- 浅析Android手机卫士之号码归属地查询
- [android] 手机卫士接收打电话广播显示号码归属地
- Android项目实战--手机卫士14--接电话时显示电话归属地
- Android利用WebService查询手机号码归属地
- Android项目实战--手机卫士04--自定义图片
- 归属感,anroid版手机来电显示归属地,我的第一个android应用亮相!
- Android项目实战--手机卫士开发系列教程
- Android项目实战--手机卫士18--读取用户的短信内容以及短信备份
- Android项目实战--手机卫士20--拿到已经安装了的程序以及程序管理主界面
- Android项目实战--手机卫士16--电话黑名单的增删改查
- Android手机端调用webservice来获得手机归属地号码
- Android项目实战--手机卫士20--拿到已经安装了的程序以及程序管理主界面
- Android项目实战--手机卫士24--程序锁的实现以及逻辑
- Android项目实战--手机卫士17--拦截黑名单以及响一声电话的处理
- Android项目实战--手机卫士09--防盗逻辑以及设置向导的完成
- 分享android手机归属地项目
- Android天气预报,手机号码归属地,股市行情WEB服务 webservice