標籤:手機安全衛士 service 安卓
思路:
1.由於我們不確定什麼時候會有來電,所以,我們應該使用服務監聽來電。
2.服務關閉的時候要取消監聽
3.通過服務的開啟和關閉控制設定頁面上CheckBox狀態。
通過服務來監聽來電資訊
- 建立一個類,繼承自Service
- 在onCreate方法中,執行對來電的監聽操作:
1) TelePhonyManager manager = getSystemService(TELEPHONY_SERVICE);
2) manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
其中,第一個參數為PhoneStateListener的對象。
第二個參數設定我們要監聽神馬~
寫一個內部類,繼承自PhoneStateListener
重寫onCallStateChanged方法,這個方法會在會話發生變化時回調。
在其中判斷狀態是否為來電,如果為來電狀態,擷取來電號碼,通過號碼擷取歸屬地。
最後,在onDestroy中,對監聽服務進行關閉。
manager.listen(listener,PhoneStatListener.LISTEN_NONE);
具體實現代碼:
public class CallService extends Service
{
private TelephonyManager manager;
private MyPhoneStateListener listener;
public CallService() {
}
public IBinder onBind(Intent intent) { return null;}private class MyPhoneStateListener extends PhoneStateListener{ //當電話狀態發生變化的時候 , 回調 public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_RINGING: String location = QueryNumberUtils.getLocationByNumber(incomingNumber); Toast.makeText(getApplicationContext(),location,Toast.LENGTH_LONG).show(); break; } }}public void onCreate(){ super.onCreate(); //監聽來電 manager = (TelephonyManager) getApplicationContext().getSystemService(TELEPHONY_SERVICE); manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);}public void onDestroy(){ super.onDestroy(); manager.listen(listener,PhoneStateListener.LISTEN_NONE); manager = null;}
}
判斷Service是否開啟
建立一個方法:
serviceIsWorking(Context context,String serviceName)
{
//擷取一個管理器
ActivityManager am = context.getSystemService(Context.ACTIVITY_SERVICE);
//獲得服務資訊
List<RunningServiceInfo> infos = am.getRunningServices(100);
//遍曆服務
for(RunningServiceInfo info : infos)
//通過info.service.getClassName() 和 服務類名進行對比
如果相同返回true。
}
判斷一個服務是否開啟
最終的實現代碼:
public static boolean serviceIsWorking(Context context,String serviceName) { //建立一個組件管理器,擷取到系統服務 ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); //擷取到正在啟動並執行服務資訊 List<ActivityManager.RunningServiceInfo> infos = manager.getRunningServices(100); //遍曆 if(infos != null) { for (ActivityManager.RunningServiceInfo info : infos) { //擷取Service名字 String name = info.service.getClassName(); if (serviceName.equals(name)) { return true; } } } return false; }
著作權聲明:剛出鍋的原創內容,希望對你有協助~
手機安全衛士------顯示來電歸屬地的操作