`
hanwesley
  • 浏览: 57098 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

android 监控来电(草稿)

 
阅读更多

思路:

 

 对来电进行监控

1)对于通讯录的电话来电不做监控

2)对于通讯录里没有的电话号码进行监控


监控规则:

  1)正则匹配 如:杭州的本地号码需要接听 其他地区来电拒接

  2)如果一些确认需要来电的号码但又不想加入黑名单的号码 加入白名单管理列表;

  3)如果是手机来电,拒接的发送一条短信(询问是何人找我干什么事情?避免误伤),如果是座机就误伤吧!

 

  android 官方教程http://developer.android.com/training/basics/firstapp/building-ui.html

https://gist.github.com/CyanogenMod/android_frameworks_base/tree/cf4550c3198d6b3d92cdc52707fe70d7cc0caa9f

—————————————分隔线——————————

 

下面是收集的一些代码片段:

public class PhoneStatReceiver extends BroadcastReceiver{
       
        private static final String TAG = "PhoneStatReceiver";
       
//        private static MyPhoneStateListener phoneListener = new MyPhoneStateListener();
       
        private static boolean incomingFlag = false;
       
        private static String incoming_number = null;

        @Override
        public void onReceive(Context context, Intent intent) {
                //如果是拨打电话
                if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){                       
                        incomingFlag = false;
                        String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);       
                        Log.i(TAG, "call OUT:"+phoneNumber);                       
                }else{     //action.equals(MyBroadcastReceiver.B_PHONE_STATE)                  
                        //如果是来电
                        TelephonyManager tm =
                            (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);                       
                       
                        switch (tm.getCallState()) {
                            case TelephonyManager.CALL_STATE_RINGING:
                                incomingFlag = true;//标识当前是来电
                                incoming_number = intent.getStringExtra("incoming_number");
                               
                                if (isBlock(incoming_number)) { 
                                    try { 
                                        Method method = Class.forName( 
                                                "android.os.ServiceManager").getMethod( 
                                                "getService", String.class); 
                                        // 获取远程TELEPHONY_SERVICE的IBinder对象的代理 
                                        IBinder binder = (IBinder) method.invoke(null, 
                                                new Object[] { TELEPHONY_SERVICE }); 
                                        // 将IBinder对象的代理转换为ITelephony对象 
                                        ITelephony telephony = ITelephony.Stub 
                                                .asInterface(binder); 
                                        // 挂断电话 
                                        telephony.endCall(); 
                                    } catch (Exception e) { 
                                        e.printStackTrace(); 
                                    } 
                                } 
                           
                               
                                Log.i(TAG, "RINGING :"+ incoming_number);
                                break;
                        case TelephonyManager.CALL_STATE_OFFHOOK:                               
                                if(incomingFlag){
                                        Log.i(TAG, "incoming ACCEPT :"+ incoming_number);
                                }
                                break;
                       
                        case TelephonyManager.CALL_STATE_IDLE:                               
                                if(incomingFlag){
                                        Log.i(TAG, "incoming IDLE");                               
                                }
                                break;
                        }
                }
        }
}
在AndroidManifest.xml,配置写好的Receiver,并拦截相应的BroadCastAction,
另外注意加上相应的权限。
<receiver android:name=".filter.PhoneStatReceiver"> 
            <intent-filter>
                 <action android:name="android.intent.action.PHONE_STATE"/>          
                 <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_CONTACTS"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
        来电分三种状态:
CALL_STATE_RINGING:来电响铃
CALL_STATE_OFFHOOK:摘机
CALL_STATE_IDLE:挂机

http://blog.csdn.net/lee576/article/details/8053387
http://wenku.baidu.com/view/f391162e453610661ed9f4b1.html


     private static final String[] PHONES_PROJECTION = new String[] {
            Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID,Phone.CONTACT_ID };
    /**得到手机通讯录联系人信息**/
    private void getPhoneContacts() {
        ContentResolver resolver = mContext.getContentResolver();

        // 获取手机联系人
        Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null);


        if (phoneCursor != null) {
            while (phoneCursor.moveToNext()) {

                //得到手机号码
                String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
                //当手机号码为空的或者为空字段 跳过当前循环
                if (TextUtils.isEmpty(phoneNumber))
                    continue;
               
                //得到联系人名称
                String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);
               
                //得到联系人ID
                Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);

                //得到联系人头像ID
                Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);
               
                //得到联系人头像Bitamp
                Bitmap contactPhoto = null;

                //photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的
                if(photoid > 0 ) {
                    Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid);
                    InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);
                    contactPhoto = BitmapFactory.decodeStream(input);
                }else {
                    contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.contact_photo);
                }
               
                mContactsName.add(contactName);
                mContactsNumber.add(phoneNumber);
                mContactsPhonto.add(contactPhoto);
            }

            phoneCursor.close();
        }
    }
    private Cursor getContacts(){ 
            // Run query 
            Uri uri = ContactsContract.Contacts.CONTENT_URI; 
            String[] projection = new String[] { 
                    ContactsContract.Contacts._ID, 
                    ContactsContract.Contacts.DISPLAY_NAME 
            }; 
            String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + 
                    (mShowInvisible ? "0" : "1") + "'"; 
            String[] selectionArgs = null; 
            //sort ordering based on localized preferences(sqlite排序用法:根据本地化设置对字符串进行比较排序) 
            String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 
     
            return managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
        } 

分享到:
评论

相关推荐

    Android studio 草稿箱

    android studio 短信草稿箱的基本功能 里面有收件人 短信内容编辑

    android 平台 知心草稿本

    android平台小程序,具有手写输入功能,草稿以图片形式存储在sdcard,并且发送到设置的邮箱

    Android案例:短信草稿箱。利用数据存储SharedPreferences,实现保存、读取短信

    利用数据存储的SharedPreferences开发技术,实现了一个简易的短信草稿箱,其功能模块包括保存短信、读取短信等。

    android shard分享

    android shard分享

    Android Mms之:草稿管理的应用

    本篇文章是对Android中的草稿管理进行了详细的分析与介绍,需要的朋友参考下

    草稿纸软件5.1版本

    草稿纸实现PC机的草稿纸功能,并帮助您弄漂亮汉字 草稿纸实现在视图区域加载图片,并能对图片进行基本操作(旋转拉伸) 草稿纸实现在视图区域中自绘各种图形,并对透明线条以及填充色进行支持 草稿纸实现在视图区域...

    ajax自动保存草稿 ajax自动保存草稿

    ajax自动保存草稿 ajax自动保存草稿 ajax自动保存草稿

    草稿纸软件5.1.0.2版本

    草稿纸软件实现PC端草稿纸功能,并帮助用户弄漂亮汉字。 草稿纸软件实现在视图区域加载图片,并能对图片进行基本操作(旋转拉伸) 草稿纸软件实现在视图区域中自绘各种图形,并对透明线条以及填充色进行支持 草稿纸...

    功能齐全的android短信平台-实现收发短信、不同会话列表显示、同一会话左右显示,删除、草稿、关联联系人

    功能齐全的android短信平台,实现功能(1)收发短信(2)不同会话列表显示(3)同一会话左右显示(4)添加联系人至收件人(5)通过上下文菜单拨打电话(6)通过menu菜单进入进入草稿箱(7)删除可以全选、反选,单条...

    高数草稿高数草稿高数草稿

    高数草稿高数草稿高数草稿

    android新建草稿删除后下次开机还会显示保存的草稿

    android 新建一个草稿,保存,然后全部删除会话,关机再开机后还会显示保存的草稿,下面与大家分享下具体的解决方法

    草稿纸软件(V5.1.0.3)

    本软件实现PC端草稿纸功能,并帮助用户弄漂亮汉字。 草稿纸软件实现在视图区域加载图片,并能对图片进行基本操作(旋转拉伸) 草稿纸软件实现在视图区域中自绘各种图形,并对透明线条以及填充色进行支持 草稿纸软件...

    草稿纸软件5.1.0.1版本

    草稿纸实现PC机的草稿纸功能 草稿纸实现在视图区域加载图片,并能对图片进行基本操作(旋转拉伸) 草稿纸实现在视图区域中自绘各种图形,并对透明线条以及填充色进行支持 草稿纸实现在视图区域的任意地方输入文字,...

    草稿纸软件源代码

    我是草稿纸软件作者,也是所谓的西熙。 草稿纸本来要做文字流通平台,在这里公开代码,主要是希望大家放过我的亲人,朋友,同学,也算为技术发展做一点点贡献。至于服务端,由于我的服务器技术也很烂,这里就不丢人...

    c#草稿纸(记事本)

    c#草稿纸,来自我的博客里面的两篇,已经实现所有的的基础功能,包含,打开,保存,复制,粘贴,剪切,打印,删除,全选,字体,颜色,主题,日期,时间,查找和替换

    idea草稿功能

    idea草稿功能

    草稿纸2.0版本

    该文件包含电子草稿纸软件,及其使用说明。草稿纸软件有图片处理, 自绘图形, 文字编辑这些功能,并对个人汉字提供支持。

    草稿纸软件5.0版本

    本软件实现PC端的草稿纸功能 实现在视图区域加载图片,并能对图片进行基本操作(旋转拉伸) 实现在视图区域中自绘各种图形,并对透明线条以及填充色进行支持 实现在视图区域的任意地方输入文字,并对个人汉字以及...

    使用Python创建快速创建剪映草稿轨道,自动生成视频

    自动生成草稿后,就可以自动剪辑了。 1. 添加一个媒体到轨道顺序 `草稿媒体库` -&gt; `内容媒体库`-&gt; `轨道片段` 2. `add_media_to_track` 会识别媒体类型,加入到对应轨道。 3. 当没有视频轨道时,创建音频轨道会先...

    Android管理手机短信

    可以显示未看短信,listview下拉刷新,发送短信,以及自动刷新,异步处理。

Global site tag (gtag.js) - Google Analytics