广播接收者拦截电话

2024-02-20 18:08
文章标签 广播 拦截 电话 接收者

本文主要是介绍广播接收者拦截电话,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 为了监听广播事件,Android中提供了一个BroadcastReceiver组件,该组件可以监听来自系统或者应用程序的广播。当Android系统产生一个广播事件时,可以有多个对应的BroadcastReceiver接受并进行处理。这些广播接收者只需要在清单文件或者代码中进行注册并指定要接受的广播事件,然后创建一个类继承自BroadcastReceiver类,重写onReceiver()方法,在方法中进行处理。广播接收者之拦截电话实现界面如下:

这里写图片描述
1.创建程序:程序对应的布局文件(activity_main.xml)如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/sdz"android:padding="15dp"tools:context=".MainActivity"><EditText
        android:id="@+id/et_ipnumber"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入拦截号码"/><Button
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/et_ipnumber"android:layout_centerHorizontal="true"android:background="#ACD6FF"android:onClick="click"android:paddingLeft="5dp"android:paddingRight="5dp"android:text="保存拦截号码"android:textSize="16sp"/>
</RelativeLayout>

2.编写页面交互代码:(MainActivity):

package cn.itcast.interceptcall;
import android.Manifest;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {private EditText et_ipnumber;private SharedPreferences sp;OutCallReceiver outCallReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if(ContextCompat.checkSelfPermission(this, Manifest.permission.PROCESS_OUTGOING_CALLS)!= PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.PROCESS_OUTGOING_CALLS},1);}et_ipnumber = (EditText) findViewById(R.id.et_ipnumber);// 创建SharedPreferences对象sp = getSharedPreferences("config", MODE_PRIVATE);}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode){case 1:if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){}else{Toast.makeText(this,"You dennied the permission",Toast.LENGTH_SHORT).show();}break;default:}}public void click(View view) {// 获取用户输入的拦截号码String number = et_ipnumber.getText().toString().trim();//创建Editor对象,保存用户输入的拦截号码SharedPreferences.Editor editor = sp.edit();editor.putString("number", number);editor.commit();Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();}}

3.运行程序
4.监听广播事件:创建一个广播接收者接受外拨电话的广播。
广播接收者OutCallReceiver代码如下:

package cn.itcast.interceptcall;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
public class OutCallReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//获取拨打的电话号码String outcallnumber = getResultData();//创建SharedPreferences对象,获取拦截号码SharedPreferences sp =context.getSharedPreferences("config",Context.MODE_PRIVATE);String number =sp.getString("number","");//判断是否是拦截电话号码if(outcallnumber.equals(number)){//清除电话setResultData(null);}}}

创建完广播之后需要注册,注册代码如下

 <receiver
            android:name=".OutCallReceiver"android:enabled="true"android:exported="true" ><intent-filter android:priority="1000"><action android:name="android.intent.action.NEW_OUTGOING_CALL"/></intent-filter></receiver>

5.测试:
输入需要拦截的号码,按保存拦截号码,会出现是否保存,按下是后,则会提示保存成功。

这篇关于广播接收者拦截电话的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/729076

相关文章

android面试:如何理解 Android 中的广播?

在 Android 中,广播是一种用于在应用程序之间传递消息的机制。它允许应用程序发送和接收全局消息,通常用于通知其他应用或组件某些事件的发生。广播可以是系统广播(由系统发送)或自定义广播(由应用程序发送)。 广播的主要特点: 异步通信:广播是一种异步的通信方式,发送广播的应用不需要等待接收应用的响应。 全局可见:广播可以被系统中的任何应用程序接收,适合用于跨应用的消息传递。 轻量级:广播

平板电脑能打电话吗?如何让不支持电话功能的平板获得电话功能?

很多选购平板电脑的朋友,都希望平板能够支持打电话功能。那么市面上所有的平板电脑能打电话吗?如果不能够打电话的平板电脑,有没有什么方法支持能够支持让其电话功能。下面我爱电脑网小编将对这个问题给大家座详细的解答   市面上的平板电脑大致共分为两种版本,一种叫做WiFi版平板电脑,另一种叫做3G版本的平板电脑。首先WiFi版的平板电脑主要通过无线路由器进行通信,有通信的距离限制。而3G版平板电

Interceptor拦截器无法拦截根目录的解决方法

今天发现了一个bug,首页home.jsp的某一个值是通过拦截器拦截所有页面,然后赋值的,然而我们的首页是通过index.jsp直接引用首页home.jsp代码(如下),拦截器无法拦截。 <%@ include file="./WEB-INF/jsp/home.jsp" %> 首先,第一个解决方法就是,将首页的引用文件改为跳转即可 <html><head><meta http-equiv

Android 接收系统广播,开机启动Service,SMS,Battery

本文内容摘自《疯狂Android讲义 第3版》李刚 著 自动开启的Service: package shortcut.song.com.myapplication;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;im

Android Ordered Broadcast 有序广播

代码设置IntentFilter: IntentFilter intentFilter = new IntentFilter();intentFilter.setPriority(15);intentFilter.addAction("shortcut.song.com.myapplication.MY_BROADCAST");intentFilter.addCategory

Android BroadcastRecevier广播消息

代码注册Receiver @Overrideprotected void onCreate(Bundle savedInstanceState) {IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("");MyBroadcast myBroadcast = new MyBroadcast();regi

Android 电话管理器TelephonyManager,获取网络,SIM卡信息

// 获取系统TelephonyManager对象 TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); AndroidManifest.xml package shortcut.song.com.myapplication;import an

2024全球广播摄像机市场前景如何?IP网络化云端融合趋势加强

一、前言 当前,全球广播电视用户持续向流媒体迁移。大多数国家广播电视台推出独立流媒体平台,流媒体趋势日渐加强。与奈飞等非广电系流媒体平台只提供点播服务不同,广电系流媒体平台一般提供电视频道直播服务、电视回看服务、视频点播服务,与传统电视渠道形成互补,而这些流媒体平台与网络媒体平台所能提供的视频服务存在着非常重合的区域。 (1)流媒体时代加速广播摄像机专业影视化发展 全球广电系流媒体平台竞争力

单播、广播、多播

单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在? 1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上