100.s1-来电归属地的显示

    xiaoxiao2021-03-25  67

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

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

    布局显示如下

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

    <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); //判断系统里面有没有这个服务,有这个服务就返回true if(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.SettingItemView android: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.SettingItemView android: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 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting); //把设置的数据保存在mPref mPref = 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(){ @Override public 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(){ @Override public 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; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate(){ super.onCreate(); tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); listener = new MyListener(); tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);//监听打电话的状态 } class MyListener extends PhoneStateListener{ //监听电话状态的变化 @Override public 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); } } @Override public void onDestroy(){ super.onDestroy(); //关闭服务,停止来电监听 tm.listen(listener, PhoneStateListener.LISTEN_NONE); } }

     

     

    转载请注明原文地址: https://ju.6miu.com/read-38932.html

    最新回复(0)