android自动回复退订,Android实现短信自动回复,挂电话

原标题:Android实现短信自动回复,挂电话

简单功能,配置一下ITelephoney,ITelephony这个接口不能直接用的。

需要先在src下新建包com.android.internal.telephony,在其中新建一个File,后缀为aidl(它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口),内容如下

packagecom.android.internal.telephony;

interfaceITelephony{

booleanendCall();

voidanswerRingingCall();

}

接下来就是一下MainActivity,垃圾代码如下。

packagecom.example.autoreply;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.app.Activity;

importjava.lang.reflect.Method;

importjava.util.HashMap;

importjava.util.List;

importcom.android.internal.telephony.ITelephony;

importandroid.content.Context;

importandroid.content.SharedPreferences;

importandroid.content.SharedPreferences.Editor;

importandroid.telephony.PhoneStateListener;

importandroid.telephony.SmsManager;

importandroid.telephony.TelephonyManager;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.view.Window;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.TextView;

publicclassMainActivityextendsActivity{

Button btn; //退出按钮

EditText et; //回复短信的内容编辑框

TextView tv; //拦截数量通知的显示

TelephonyManager tpm;

SharedPreferences sp;

intcount = 0; //来电总数

intpeo = 0; //来电的号码个数,跟来电总数有区别,这个不包括重复来电,

String num; //存储来电号码

HashMap numMap; //用来存储来电号码

@Override

publicvoidonCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); // 注意顺序

setContentView(R.layout.activity_main);

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, // 注意顺序

R.layout.title);

tv = (TextView) findViewById(R.id.textView1);

et = (EditText) findViewById(R.id.editText1);

btn = (Button) findViewById(R.id.button1);

sp = this.getSharedPreferences( "SP", MODE_PRIVATE);

numMap = newHashMap();

if(sp.getString( "sms", null) != null){

et.setText(sp.getString( "sms", "我现在正在上课,一会儿下课了联系你"));

}

tpm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); //获取电话通讯服务

tpm.listen( newMyPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE); //给电话服务增加状态监听器,监听来电,通话,挂断等状态

btn.setOnClickListener( newOnClickListener() {

@Override

publicvoidonClick(View v){

Editor editor = sp.edit();

editor.putString( "sms", et.getText().toString());

editor.commit(); //这里是默认自动保存用户编辑过的回复短信内容的,

}

});

}

classMyPhoneStateListenerextendsPhoneStateListener{

@Override

publicvoidonCallStateChanged(intstate, String incomingNumber){

num = incomingNumber;

switch(state) {

caseTelephonyManager.CALL_STATE_IDLE: //空闲

break;

caseTelephonyManager.CALL_STATE_RINGING: //来电

endCall(); //自动挂断

if(!numMap.containsKey(num)){ //如果之前没有来电,把这个号码加入已经来电过的列表

sendMes();

numMap.put(num, null);

peo ++;

updateUi(); //更新来电数目

}

break;

caseTelephonyManager.CALL_STATE_OFFHOOK: //摘机(正在通话中)

break;

}

}

privatevoidupdateUi(){

if(count > 0){

tv.setVisibility(View.VISIBLE);

}

handler.sendEmptyMessage( 0);

// tv.setText("已拒接" + count + "个来电,共" + peo +"个人联系过您");

}

privatevoidendCall()

{

Class c = TelephonyManager.class;

try

{

Method getITelephonyMethod = c.getDeclaredMethod( "getITelephony", (Class[]) null);

getITelephonyMethod.setAccessible( true);

ITelephony iTelephony = null;

iTelephony = (ITelephony) getITelephonyMethod.invoke(tpm, (Object[]) null);

iTelephony.endCall();

count ++;

updateUi();

}

catch(Exception e)

{

}

}

privatevoidsendMes(){

//直接调用短信接口发短信

SmsManager smsManager = SmsManager.getDefault();

List divideContents = smsManager.divideMessage(et.getText().toString());

for(String text : divideContents) {

smsManager.sendTextMessage(num, null, text, null, null);

}

}

}

publicHandler handler = newHandler()

{

publicvoidhandleMessage(android.os.Message msg)

{

switch(msg.what)

{

// 接收的内容

case0:

tv.setText( "已拒接"+ count + "个来电,共"+ peo + "个人联系过您");

break;

default:

break;

}

};

};

}

权限设置:

返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端设置画布的高度_【后期修图】ps画布设置详解

在图像设计时少不了好的工具,现在当下比较流行的软件属 PS 最好,它的功能强大,是设计者的必备工具之一。在今天的内容中,小编要与大家分享下PS中修改画布大小的实例操作步骤,希望文章对大家以后的工作有所帮助。画布大…

Android插u盘自动执行,android tv box ---- 插入u盘直接播放指定文件夹中的视频

android tv box ---- 插入u盘直接播放指定文件夹中的视频思路:1.监听u盘插入广播2.遍历指定目录下的所有文件,找到视频文件3.将符合条件的文件加入播放集合中4.循环播放num one:配置AndroidManifest.xml,注册一个静态广播num two:实现广播接收者public class MyUsbReceiver ext…

down redis集群_redis有哪些集群模式

Redis集群一般有5种:1,主从复制2,哨兵模式3,Redis官方提供的Cluster集群模式(服务端)4,Jedis sharding集群(客户端sharding)5,利用中间件代理,比如豌豆荚的codis等介绍完他们的模式,现在来分析一…

android studio占内存大小,极大精简android studio在C盘的内存

在C盘占很大的内存大约就2种原因:1.SDK占内存太大2.AVD模拟器占内存太大第一种情况,移动SDK(用android studio不需要配置环境变量)先移动C盘的Android目录,里面是Sdk目录文件,复制到E盘,再删掉C盘的sdk,然后…

和gdi绘图效率比较_绘图计算器测评来袭!哪一款才是你AP考试的最佳拍档?

温馨提示:距离AP考试还有不到1个月。其中不少中国考生选择了理科科目,其中微积分,统计,化学,物理,生物的科目都可以使用绘图计算器。今天,小编收集了四款口碑不错的计算器进行测评,大…

android 将布局多次添加,android – 如何在布局xml中添加循环视图

您无法将aar文件添加到Eclipse中的libs文件夹(它不是jar文件)目前,使用新的RecyclerView的最佳方式是切换到Android Studio并将此依赖项添加到build.gradlecompile com.android.support:recyclerview-v7:只是一个说明.使用”占位符不是一个好习惯,但在这种情况下,您正在尝试预览…

去除小圆点_去除li小圆点以及解决其空格问题

不管是ul还是ol中的li前面始终有个小圆点,以前没有发现问题,都是直接给ul增加list-style:none;属性,可今天屡试不爽的属性出现问题了,上图通过两张截图可以清晰的看到虽然小圆点去掉了,但是还是占着位置。典型的占着**…

android webviewclient 点击事件,Android Api WebViewClient 详细解析

设计思想理解在WebView的设计中,不是什么事都要WebView类干的,有相当多的杂事是分给其他类做的,这样WebView专心干好自己的解析、渲染工作就行了。比如我们最熟知的,所有针对WebView的设置都封装到了WebSettings里。我们知道&…

js svg语音波动动画_11 个非常受欢迎的 JavaScript 动画库,值得学习!

1.Three.js超过46K的星星,这个流行的库提供了非常多的3D显示功能,以一种直观的方式使用 WebGL。这个库提供了、 、CSS3D 和 WebGL渲染器,让我们在设备和浏览器之间创建丰富的交互体验。该库于2010年4月首次推出,目前仍有近1000名贡…

hbuilder边框代码是什么_看懂HTML代码,摸清国外买家喜欢搜什么关键词

看懂HTML代码,摸清国外买家喜欢搜什么关键词大家每天都忙着找关键词,忙着写标题,忙着做各种的优化。目的就是想把自己的产品排名到前面,获得更多的曝光,带来更多的询盘。在这个过程中客服同时也是一名搜索优化人员&…

通域消化内镜Android患者版,市中心医院消化内科Ⅰ病区开创超声内镜治疗新领域...

胃底静脉曲张常见于肝硬化患者,易反复出现消化道出血症状,严重时危及生命。由于大部分肝硬化患者肝功能储备和手术耐受性差,内镜下组织胶黏合剂注射治疗是常用治疗方法。但对于合并较大直径的分流道患者来说,组织胶有可能通过分流…

android+放大缩小图片+有jar嘛,Android相册支持点击放大图片,滑动切换图片,手势放大缩小...

【实例简介】项目使用了开源框架Universal-Image-Loader显示本地图库所有照片点击放大,单击退出双击放大缩小支持左右滑动查看图片支持手势放大缩小图片【实例截图】【核心代码】ImageLoaderTest└── ImageLoaderTest├── AndroidManifest.xml├── bin│ ├…

bootstraptable查看详情_bootstrap-table前端实现多条件时间段查询数据

实现思路:通过正则匹配到字段是否符合条件,时间段转换为时间戳比对。这是大体的效果图:页面的html代码采购部门:{foreach name"ware_list" item"vo" }{$vo.warehouse_name}{/foreach}单据日期:--查…

python数据校验_最近抽空造了一个数据校验的轮子 Python -validator

最近抽空造了一个数据校验的轮子 python-validator。在开发 web 应用时,经常需要校验前端传入的数据。如果使用 Django,那么可以使用自带的 forms 进行数据校验。python-validator 的灵感也是来源于 Django 的 forms (类似 ORM 的方式定义数据结构)&…

sql android客户端,XSGManage: 学生成绩管理系统---客户端,基于Android+Django+sqlit3开发...

D:.├─.gradle //编译产生,可删除后打开├─.idea //编译产生,可删除后打开├─app //项目核心代码│ ├─build //构建产生,若报错可删除后打开│ ├─debug //运行时产生app的位置│ ├─libs //相关Java依赖包│ └─src│ ├─androidTe…

python发送qq邮件失败_Python实现给qq邮箱发送邮件的方法

#-*-coding:utf-8-*-## 导入smtplib和MIMEText#from email.mime.text import MIMETextimport smtplib## 要发给谁,这里发给2个人#mailto_list["naughty610qq.com","1034791200qq.com"]## 设置服务器,用户名、口令以及邮箱的后缀#mai…

android设备报警推送,Firebase推送通知未送达所有android设备

我正在使用PHP向特定的Android应用程序用户发送firebase推送通知。function enviar_push($token,$titulo,$subtitulo){define( API_ACCESS_KEY, AAA.....);// $registrationIds ;#prep the bundle$msg array(body > $subtitulo,title > $titulo,subtitle > );$field…

hana 表空间_oracle currentval

一个 lob 实例包含一个 locator 和 value。可以将...ALTER TABLE current_table MOVE PARTITION partition_...For every new extent created, Oracle generates ......日期时间函数的实现 Oracle采用SYSDATE作为取当前时间,而DB2中采用CURRENTTIMESTAMP...[n]; // 生产 DB2 UD…

vscode html中加css,[VScode教程] VSCode 支持CSS

VSCode 支持CSS,介绍两个比较实用的功能:取色器 Color Picker和CSS 选择器的预览。取色器 Color Picker首先,你可以在书写 HTML 和 CSS 时使用取色器。在书写 HTML 和 CSS 的时候,你可能经常需要修改元素的颜色。VS Code 为修改颜…

无限超越超级机器人nds_阿里重新定义个人电脑!仅名片大小,无限升级,不怕丢失无惧病毒,价格仅传统PC一半...

9月17日,阿里云智能总裁、达摩院院长张剑锋表示,过去10年,阿里云自研飞天云平台,造了一台“超级计算机”——云电脑“无影”。这是一台长在云上的“超级电脑”:在本地没有主机,没有电脑CPU和硬盘&#xff0…