android项目手机卫士来电显示号码归属地

android项目手机卫士来电显示号码归属地,第1张

概述昨日实现了360手机卫士来电显示归属地的功能,具体的功能就是当来电的时候,显示当前号码的归属地,学习之后发现 *** 作

昨日实现了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项目手机卫士来电显示号码归属地全部内容,希望文章能够帮你解决android项目手机卫士来电显示号码归属地所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147933.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存