栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Android studio 实战演练,拦截史迪仔程序代码

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android studio 实战演练,拦截史迪仔程序代码


很多同学在写这个代码的时候,会有很多问题,我有幸做了出来,在这里分享一下,如果有用,希望点个赞。第一次发文,望多多支持。


一、创建程序:
创建一个名为InterceptCall 的Project项目文件,包名为cn.itcast.interceptcall,拦截呼叫的意思。
首先把显示界面写好:准备一张background(背景)图片,放在drawable 文件夹里面,名称是“sdz”就行,后缀名不用太在意。(android:background="@drawable/sdz")

以下布局文件,activity_main.xml不同版本中tools:context=".MainActivity"可能会有不同




    

    

主文件,MainActivity.java(如果复制粘贴,注意修改包名“package”)

  将要拦截的号码保存到SharedPreferences对象中

这里要注意△ if (ContextCompat.checkSelfPermission(this, Manifest.permission.PROCESS_OUTGOING_CALLS)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.PROCESS_OUTGOING_CALLS},1);

这一段代码是很多人在教程上找不到的,这是高版本虚拟机获取拦截权限的代码,如果你的虚拟机版本比较高,比如我的是8.1API27的虚拟机,这段代码必不可少。

package cn.itcast.interceptcall;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.content.pm.PackageManager;
import android.os.Bundle;
import android.content.SharedPreferences;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private EditText et_ipnumber;
    private SharedPreferences sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_ipnumber=(EditText) findViewById(R.id.et_ipnumber);
        //创建SHaredPreferences对象
        sp=getSharedPreferences("config",MODE_PRIVATE);

         if (ContextCompat.checkSelfPermission(this, Manifest.permission.PROCESS_OUTGOING_CALLS)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.PROCESS_OUTGOING_CALLS},1);
    }
}
    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();
    }

}

 OutCallReceiver.java(如果复制粘贴,注意修改包名“package”)

“public class XXXXX extends BroadcastReceiver”中xxxx要与文件名一致。

监听广播事件:创建一个广播接收者OutCallReceiver,用于接受外拨电话的广播。

创建Java文件的时候,选中包文件,右键点击——>new——>Other——>broadcast recevier。

 OutCallReceiver.java

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 {
    public OutCallReceiver(){}
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        //获取拨打的电话号码
        String outcallnumber = getResultData();
        //创建sharedPreferces 对象,获取拦截号码
        SharedPreferences sp = context.getSharedPreferences("config",Context.MODE_PRIVATE);
        String number=sp.getString("number","");
        //判断是否拦截号码
        if(outcallnumber.equals(number)){
            //清除电话
            setResultData(null);
        }
    }
}

清单文件AndroidManifest.xml

 注册和设置权限一定要注意一下。




    
        
            
                

                
            
        

        
            
            
                
            

        
    
    
    

最后拦截是没问题的,截图不好截,所以就不发了。

有什么建议可以提出来。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/450203.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号