黑名单挂断电话及删除电话记录

Android开发之来电电话挂断实现 在Android1.5版本之前,实现挂断电话是非常容易的事,只需要调用TelephonyManager的endCall()方法就可以了,但在1.5版本之后,Google工程师为了手机的安全期间,把endCall的方法隐藏掉了。所以实现挂断电话可以通过反射的方法,执行endCall方法。具体实现如下: TelephonyManager在源码里是这样描述的:Context.getSystemService(Context.TELEPHONY_SERVICE)},我们通过TELEPHONY_SERVICE系统服 阅读详情

黑名单挂断电话及删除电话记录

  1. 挂断电话
    挂断电话需要申请权限android.permission.CALL_PHONE
    对于黑名单号码的来电如何挂断,由于监听来电时在TelephonyManager中进行监听的,在Android1.5之前,
    TelephonyManager中有一个endCall()方法能够直接挂断电话,但是后来谷歌工程师认为这样挂断电话是不安全的,所以就隐藏了这个方法。
    挂断电话是Android中的一个远程服务,必须要拷贝系统的aidl文件,ITelephony.aidl,在自己的工程中新建一个包(com.android.internal.telephony)
    然后将ITelephony.aidl放到这个包中,但是发现报错了,原因是还要再考一个aidl文件NeighboringCellInfo.aidl,
    然后新建一个包(android.telephony)将这个aidl文件放入到这个包中。在程序中怎么使用呢?(这个ITelephony接口通常都是由TelephonyManager使用)

    一般都是在电话来电状态监听的时候监听到了响铃状态时就挂断电话,但是仍会在来电记录中有记录

    /**
     * 挂断电话的方法.
     */
    public void endCall(String incomingNumber) {
        try {
            // Object obj = getSystemService(TELEPHONY_SERVICE);
            // ITelephony iTelephony = ITelephony.Stub.asInterface((IBinder)
            // obj);这样写得到的是IBinder的一个代理对象,会报错,所以要用下面的反射而不能这样做
            Method method = Class.forName("android.os.ServiceManager")
                    .getMethod("getService", String.class);//getSystemService内部就是调用了ServiceManager的getService方法。
            IBinder binder = (IBinder) method.invoke(null,
                    new Object[] { TELEPHONY_SERVICE });
            ITelephony iTelephony = ITelephony.Stub.asInterface(binder);
            iTelephony.endCall();
        } catch (Exception e) {
            e.printStackTrace();
        }
    } 
  2. 删除电话记录
    删除通话记录要申请权限android.permission.WRITE_CONTACTS
    而且通话记录并不是在挂断电话后立即生成的,所以这里要对通话记录的内容提供者注册一个内容观察者,在内容观察者观察到内容变化的时候再删除其中的数据。

    public class CallSmsFirewallService extends Service {
    
        @Override
        public void onCreate() {
            tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
            listener = new PhoneListener();
            tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
            super.onCreate();
        }
    
        @Override
        public void onDestroy() {
            tm.listen(listener, PhoneStateListener.LISTEN_NONE);//服务关闭的时候就取消电话状态的监听
        }
    
        private class PhoneListener extends PhoneStateListener {
            long startTime;
    
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                switch (state) {
    
                case TelephonyManager.CALL_STATE_IDLE: // 空闲状态
                break;
                case TelephonyManager.CALL_STATE_RINGING:
                    String mode = dao.findMode(incomingNumber);
                    if ("1".equals(mode) || "2".equals(mode)) {
                        Log.i(TAG, "挂断电话...");
                        endCall(incomingNumber);// 呼叫记录不是立刻生成的 .
                        // 注册一个呼叫记录内容变化的内容观察者.
                        Uri uri = Uri.parse("content://call_log/calls");
                        getContentResolver().registerContentObserver(uri, true,
                                new CallLogObserver(new Handler(), incomingNumber));
    
                    }
                    break;
                }
    
                super.onCallStateChanged(state, incomingNumber);
            }
    
        }
    
        private class CallLogObserver extends ContentObserver {
            private String incomingNumber;
    
            public CallLogObserver(Handler handler, String incomingNumber) {
                super(handler);
                this.incomingNumber = incomingNumber;
            }
    
            // 当观察到数据发生改变的时候调用的方法.
            @Override
            public void onChange(boolean selfChange) {
                Log.i(TAG, "呼叫记录变化了.");
                deleteCallLog(incomingNumber);
                getContentResolver().unregisterContentObserver(this);//删除完通话记录之后就立马进行移除内容观察者
                super.onChange(selfChange);
            }
    
        }
    
        /**
         * 挂断电话的方法.
         * 
         * @param incomingNumber
         */
        public void endCall(String incomingNumber) {
            try {
    
                // Object obj = getSystemService(TELEPHONY_SERVICE);
                // ITelephony iTelephony = ITelephony.Stub.asInterface((IBinder)
                // obj);
                Method method = Class.forName("android.os.ServiceManager")
                        .getMethod("getService", String.class);
                IBinder binder = (IBinder) method.invoke(null,
                        new Object[] { TELEPHONY_SERVICE });
                ITelephony iTelephony = ITelephony.Stub.asInterface(binder);
                iTelephony.endCall();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        /**
         * 移除呼叫记录
         * 
         * @param incomingNumber
         */
        public void deleteCallLog(String incomingNumber) {
            Uri uri = Uri.parse("content://call_log/calls");
            getContentResolver().delete(uri, "number=?",
                    new String[] { incomingNumber });
        }
    }

  • 邮箱 :charon.chui@gmail.com
  • Good Luck!
电话短信黑白名单源码 基于android2.3开发的电话短信黑名单软件源码,可拦截黑名单,仅放行白名单或全部不拦截。电话和短信都可以拦截 立即下载

相关推荐

android实现接通和挂断电话

主要为大家详细介绍了android实现接通和挂断电话功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

对系统数据库表变化的监听

1.注册监听 this.getContentResolver().registerContentObserver(CallLog.CONTENT_URI, true, myContentObserver);   2. /** * 用来实现对通话记录表变化的监听 监听到变化的时候发送Message * * */ private ContentObserver...

YK_love_GQ的专栏 761

OFDM接收机同步——分组检测

上一篇讲了OFDM发射机中的长短训练序列生成原理,基于此可以得到长短训练序列的准确数值,为接收机中的符号同步中的相关运算提供基础。 进入符号同步前,首先来看OFDM接收机中的第一步——分组检测。分组检测就是检测突发传输方式的信道上是否有新的数据到达,算法的好坏直接影响着接收机的后续工作性能。 一、本文意义 基于《基于xilinx fpga 的ofdm的通信系统基带设计》这本教材中分组检测算法原理,通过matlab编程仿真验证“延时相关+保持长度”分组检测算法的有效性。同时,通过仿真证明教材上的判决公式的问题

boayel的博客 2202

Android通话记录过滤和监听

1.通话记录过滤     通常在显示通话记录的时候,只需要显示每个人通话记录的最后一次,那么就要过滤掉每个人多次通话记录的其它记录,一想到这个,自然就想到sql group by语句,但是通过Android提供的内容提供者getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder)去查询,不能在其

wangjiang 4351

MFC工具栏增加EditBox和Button

1. 在资源视图中增加EditBox, Button控件,ID分别为ID_EDIT_SEED, ID_BTN_SEED 2. 在CMainFrame中增加成员变量 CMFCToolBarEditBoxButton *m_editSeed; CMFCToolBarButton *m_btnSeed; 3. 在CMainFrame::OnCreate中创建控件 m_editSeed = new CMFCToolBarEditBoxButton(ID_EDIT_SEED, GetCmdMgr()-&.

学习是为了探索这个世界的本质 804

拆解一个800G光模块:手把手带你认识里面的MT插芯和光纤阵列(FA)

本文详细拆解了800G光模块中的关键组件MT插芯和光纤阵列(FA),揭示了并行光学技术如何实现高速数据传输。通过显微镜下的精密观察,展示了MT插芯的高精度构造和光纤阵列的连接奥秘,同时解析了高精度研磨工艺对光信号传输的重要性。这些微型组件是高速收发模块实现800Gbps带宽的核心技术。

weixin_30839881的博客 1557

Android系统之registerContentObserver(一)

(1)API ContentObserver——内容观察者,目的是观察特定Uri引起的数据库的数据变化,继而做一些相应的处理,它类似于数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri数据发生变化时,便会触发它。 (A)ContentResolver类:注册/取消注册ContentObserver方法 /* 为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri发生改变时,回调该实例对象去处理。 uri—— 需要观察的Uri(需要在UriMat

Flying snow 1万+

PCIe Gen4 Switch芯片PM40028调试踩坑实录:从boot引脚设置到串口无输出的诡异问题

本文记录了PCIe Gen4 Switch芯片PM40028的实战调试过程,重点剖析了从boot引脚配置错误导致串口无输出,到使用逻辑分析仪定位并解决启动问题的完整排障思路。文章深入探讨了芯片启动流程、硬件信号测量方法,并总结了高速硬件调试的核心经验与系统性排查清单,为工程师解决类似PCIe Gen4设备调试难题提供实用指南。

i8j9k0l1的博客 253

5.4 来电黑名单拦截 ,删除呼叫记录

1. 创建黑名单服务 2.在服务中创建TelephoneyManager,并给电话管理者设置来电监听事件 3.在实现监听事件未实现的方法中,switch电话管理者的状态 ,在电话处于来电状态时判断来电号码是否存在黑名单中 4.如果来电号码在黑名单数据库中,查找出号码对应的mode 5.如果mode的值是"1"||"3" , 挂掉来电电话,删除呼叫记录     --------

HelloWold 1487

海思芯片OpenHarmony系统移植:Sensor传感器模块HDF驱动配置HCS文件详解

海思系列芯片的传感器模块通过HDF(Hardware Driver Foundation)驱动框架进行管理和配置。传感器HCS(HDF Configuration Source)配置文件定义了各类传感器的硬件参数、总线配置、寄存器序列等信息,为传感器驱动提供必要的初始化和运行参数。海思系列芯片适配OpenHarmony的传感器HDF配置HCS文件是传感器驱动开发的关键部分,通过合理配置可以实现各种传感器设备的驱动支持。

m0_67505153的博客 210

数据结构之博弈树搜索(深度优先搜索)

数据结构之博弈树搜索(深度优先搜索)

LucianaiB的博客 1527

android 名册源代码,Android编程中黑名单的实现方法

本文实例讲述了Android编程中黑名单的实现方法。分享给大家供大家参考,具体如下:说明:由于挂断电话android api不是对外开放的,所以需要使用反射的方法得到拨打电话的服务。1.将android源代码中的"aidl"文件拷贝到项目中这样项目中会生成两个包:android.telephony;此包中文件为:NeighboringCellInfo.aidlcom.android.inter...

weixin_33122947的博客 241

Java开发者终极抉择:IntelliJ IDEA vs VS Code —— 4大维度深度对比评测

🔥关注墨瑾轩,带你探索Java的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手!🚀🔥技术宝库已备好,就等你来挖掘!🚀🔥订阅墨瑾轩,智趣学习不孤单!🚀🔥即刻启航,编程之旅更有趣!🚀在Java开发领域,选择合适的集成开发环境(IDE)对于提高开发效率和代码质量至关重要。和(简称VS Code)是两个广受好评的开发工具,各自拥有独特的特性和庞大的用户群。本篇将从多个维度深入探讨这两款IDE对Java开发者来说的优劣,包括但不限于性能、用户体验、生态系统、调试能力、以及特定Java功能的支持等方面。

java专栏 8593

Android初级教程反射+AIDL+内容观察者监控黑名单号码代码模板

对于想要拦截一些莫名的陌生号码,就需要电话拦截功能与删除其电话记录功能。拦截的主要业务逻辑,分别是在一个服务里面进行:1、注册电话监听;2、取消注册电话监听(当然注册于取消是在服务里面建立一个广播接收者)。删除电话日志的功能,是靠内容观察者和内容提供者。 下面给出实现电话监听,取消注册监听,内容观察者监听电话数据库状态的主要代码。对于以后开发此类产品,不需要去查看系统源码,复制粘贴这...

weixin_30821731的博客 183

【新版系统架构】系统架构设计师教程全篇知识点提炼

信息系统的5个基本功能:输入、存储、处理、输出和控制信息系统的发展:诺兰模型:初始阶段、传播阶段、控制阶段、集成阶段、数据管理阶段、成熟阶段信息系统的分类:传统的信息系统分为:业务(数据)处理系统、管理信息系统(MIS)、决策支持系统(DSS)、专家系统(ES)、办公自动化系统(OAS)等5类信息系统的生命周期:1、产生阶段2、开发阶段(总体规划、系统分析、系统设计、系统实施、系统验收阶段)3、运行阶段4、消亡阶段信息系统建设原则:1、高层管理人员介入原则。

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

挂断电话,删除呼叫记录,接口和回调函数,分页分批加载数据

34.挂断电话

不落航班 1400

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

android 黑名单中电话拦截

今天讲一下最近项目中刚做的黑名单拦截,其中可以拦截短信和电话 先讲一下拦截电话的操作 首先要注册一个监听电话广播的广播接收器。 在Manifest文件中 <receiver android:name=".Receiver.InterceptSmsReceiver" android:enabled="true" android:exported="true">

gongzhiyao37390814的博客 1793

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Android项目:手机安全卫士(13)—— 通讯卫士之电话拦截与挂断

Android项目:手机安全卫士(13)—— 通讯卫士之电话拦截与挂断1 介绍上一节我们讲了黑名单数据的存储等 CRUD 操作,今天,就到了它们发挥作用的时候了,通讯卫士功法终于要练成了。关于项目相关文章,请访问: Android 项目:手机安全卫士(7)—— 手机防盗功能 Android 项目:手机安全卫士(8)—— 管理员权限 Android 项目:手机安全卫士(9)—— 手机号码归属地查询 A

XWdoor 3891

31、通信卫士--拦截黑名单电话

当黑名单号码打进来时,自动挂断,并且在通话历史记录中删除该条记录。 挂断电话的操作可以通过PackageManager对象来实现,但是在android1.5以后,该方法没有暴露出来,需要通过AIDL来实现。 一个是ITelephony.aidl,从网上搜索下载: /* * Copyright (C) 2007 The Android Open Source Project * * Li

大星星的专栏 3028

android 电话拦截

1. 床架aidl文件,ITelephony.aidl 这个文件创建在aidl文件夹下面的 com.android.internal.telephony包下面 2. ITelephony文件里面添加接口与方法,这样自己写这个文件并且只添加这两个方法的话就不用再引入 CellInfo.aidl 这样的文件了(注意:这个文件的内容可以使用google提供的内容,里面有很多其他的接口,这...

dianqun1977的博客 257

Android - 在线浏览源码,电话短信相关,文本变化监听器

最后看一下学习需要的所有知识点的思维导图。在刚刚那份学习笔记里包含了下面知识点所有内容!文章里已经展示了部分!如果你正愁这块不知道如何学习或者想提升学习这块知识的学习效率,那么这份学习笔记绝对是你的秘密武器!

2201_75604580的博客 402

安全卫士第四天--23黑名单拦截

case TelephonyManager.CALL_STATE_RINGING: // 零响状态     firstRingTime = System.currentTimeMillis();     Log.i(TAG,"来电号码为"+ incomingNumber);     // 判断incomingnumber是否在黑名单中     if(dao.find(incomingNum

IT欢乐颂——编程总结、挖掘资源、分享投资、区块链、炒房。用数据讲IT圈的欢乐颂 897

Android--手机卫士涉及的知识点总结(二)

短信拦截:开启服务并在里面注册一个广播接收者 ? 1 2 3 开启服务: Intent intent=new Intent(SettingActivity.this,CallSmsSafeService.class);     startService(intent); //服

超宇的博客 919

安卓骚扰拦截挂断电话时候的操作

挂断电话时候需要执行的操作 由于在开发的时候谷歌自己屏蔽了api,所以需要自己找到其api再编写出来。 清单文件添加以下内容            publicvoid endCall() {               //ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVI

AchillesLufffy的博客 1030
上一篇: 短信广播接收者
下一篇: 获取手机及SD卡可用存储空间
CharonChui
博客等级 码龄12年 66粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值