[android] 手機衛士來電顯示號碼歸屬地,android來電顯示

來源:互聯網
上載者:User

[android] 手機衛士來電顯示號碼歸屬地,android來電顯示

繼續N天前的項目

開啟服務監聽手機來電,查詢資料庫,顯示歸屬地

詳細內容可以參考這篇博文:http://www.cnblogs.com/taoshihan/p/5331232.html

 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;    }}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.