本文主要是介绍广播接收者拦截电话,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
为了监听广播事件,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.测试:
输入需要拦截的号码,按保存拦截号码,会出现是否保存,按下是后,则会提示保存成功。
这篇关于广播接收者拦截电话的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!