模拟拨打电话,接听电话,挂断电话,拨打为空号,等等,这些动作用Java接口监听的方式来完成,主要是为了训练使用接口监听回调


        /**
* 业务场景一:
* 【萍萍】--->请输入手机号码进行拨打...
* 13787686565
* 【刘德利】-->萍萍 13787878789 接听(j) 挂断(g)
* j
* 【萍萍】--->对方已接听,正在通话中...
*
* 业务场景二:
* 【萍萍】--->请输入手机号码进行拨打...
* 13787686565
* 【刘德利】-->萍萍 13787878789 接听(j) 挂断(g)
* g
* 【萍萍】--->对方已挂断。
*
* 业务场景三:
* 【萍萍】--->请输入手机号码进行拨打...
* 13787686566
* 【萍萍】-->电话号码是空号
*/

执行效果:


电话接口监听的具体实现代码:

package com.call.listener.phone;

/**
* 定义拨打出错接口
* @author Liudeli
*
*/
public interface OnCallError { /**
* 定义拨打出现错误的方法
* @param error
*/
public void callError(String error); }
package com.call.listener.phone;

/**
* 拨打被挂断接口回调
* @author Liudeli
*
*/
public interface OnCallRefuse { /**
* 此行为是拨打被挂断的行为
* @param callRefuse
*/
public void callRefuse(String callRefuse); }
package com.call.listener.phone;

/**
* 成功监听接口回调
* @author Liudeli
*
*/
public interface OnCallSuccess { /**
* 接听成功监听行为标准
* @param success 传入成功信息数据
*/
public void callSuccess(String success); }
package com.call.listener.phone;

/**
* 是否接听接口回调
* @author Liudeli
*
*/
public interface OnCallWhetherAnswer { /**
* 此方法用于询问被拨打着是否接听
* @param whetherAnswer
*/
public void whetherAnswer(String whetherAnswer); }
package com.call.listener.phone;

/**
* Phone配置对象
* @author Liudeli
*
*/
public class PhoneConfig { /**
* 通讯录名称(拨打者)
*/
public static final String contactsName = "【萍萍】"; /**
* 通讯录手机号码(拨打者)
*/
// public static final String contactsNumber = "13787878789"; /**
* 通讯录名称(被拨打者)
*/
public static final String contactsNameAnswer = "【刘德利】"; /**
* 通讯录手机号码(被拨打者)
*/
public static final String contactsNumberAnswer = "13787686565"; }
package com.call.listener.phone;

/**
* 定义电话接口标准规范
* @author Liudeli
*
*/
public interface IPhone { /**
* 主动拨打电话
* @param name 传入拨打者名称
* @param number 传入拨打着电话号码
* @return 返回当前对象本身
*/
public Phone call(String name, String number); /**
* 主动拨打引发的错误监听
* @param callError 拨打出错接口(用于接口回调)
* @return 返回当前对象本身
*/
public Phone callErrorListener(OnCallError callError); /**
* 询问被拨打者是否接听
* @param callWhetherAnswer 是否接听来电信息(用于接口回调)
* @return 返回当前对象本身
*/
public Phone callWhetherAnswerListener(OnCallWhetherAnswer callWhetherAnswer); /**
* 被拨打者成功接听监听
* @param callSuccess 接听成功接口(用于接口回调)
* @return 返回当前对象本身
*/
public Phone callSuccessListener(OnCallSuccess callSuccess); /**
* 被拨打者挂断监听
* @param callRefuse 挂断接口(用于接口回调)
* @return 返回当前对象本身
*/
public Phone callRefuseListener(OnCallRefuse callRefuse); /**
* 成功接听通知
*/
public void successCall(); /**
* 挂断电话通知
*/
public void refuseCall(); /**
* 点击拨打电话
*/
public void onClickCall(); }
package com.call.listener.phone;

/**
* 电话监听拨打具体实现类
* @author Liudeli
*/
public class Phone implements IPhone { /**
* 定义单例模式
*/
private static Phone phone = null; public static Phone getInstance() {
if (null == phone) {
synchronized (Phone.class) {
phone = new Phone();
}
}
return phone;
} // 保存变量名称
private String name;
// 保存变量电话号码
private String number; public Phone call(String name, String number) {
this.name = name;
this.number = number;
return this;
} // 保存拨打错误接口
private OnCallError callError; public Phone callErrorListener(OnCallError callError) {
this.callError = callError;
return this;
} // 保存是否接听接口
private OnCallWhetherAnswer callWhetherAnswer; public Phone callWhetherAnswerListener(OnCallWhetherAnswer callWhetherAnswer) {
this.callWhetherAnswer = callWhetherAnswer;
return this;
} // 保存成功接听接口
private OnCallSuccess callSuccess; public Phone callSuccessListener(OnCallSuccess callSuccess) {
this.callSuccess = callSuccess;
return this;
} // 保护挂断接口
private OnCallRefuse callRefuse; public Phone callRefuseListener(OnCallRefuse callRefuse) {
this.callRefuse = callRefuse;
return this;
} public void successCall() {
callSuccess.callSuccess(PhoneConfig.contactsName+ "--->" + "对方已接听,正在通话中...");
} public void refuseCall() {
callRefuse.callRefuse(PhoneConfig.contactsName+ "--->" + "对方已挂断...");
} public void onClickCall() {
if (PhoneConfig.contactsNumberAnswer.equals(number)) {
// 电话号码拨打正确 successs
callWhetherAnswer.whetherAnswer(PhoneConfig.contactsNameAnswer
+ "--->" + "萍萍 13787878789 接听(j) 挂断(g)");
} else {
// 电话号码拨打错误
callError.callError(PhoneConfig.contactsName + "--->" + "电话号码是空号。");
}
} }
package com.call.listener;

import java.util.Scanner;
import com.call.listener.phone.IPhone;
import com.call.listener.phone.OnCallRefuse;
import com.call.listener.phone.OnCallSuccess;
import com.call.listener.phone.OnCallError;
import com.call.listener.phone.OnCallWhetherAnswer;
import com.call.listener.phone.Phone;
import com.call.listener.phone.PhoneConfig; /**
* 电话监听器测试端程序
* @author Liudeli
*
*/
public class Main { private static Scanner scanner;
private static IPhone iPhone; public static void main(String[] args) { /**
* 业务场景一:
* 【萍萍】--->请输入手机号码进行拨打...
* 13787686565
* 【刘德利】-->萍萍 13787878789 接听(j) 挂断(g)
* j
* 【萍萍】--->对方已接听,正在通话中...
*
* 业务场景二:
* 【萍萍】--->请输入手机号码进行拨打...
* 13787686565
* 【刘德利】-->萍萍 13787878789 接听(j) 挂断(g)
* g
* 【萍萍】--->对方已挂断。
*
* 业务场景三:
* 【萍萍】--->请输入手机号码进行拨打...
* 13787686566
* 【萍萍】-->电话号码是空号
*/ scanner = new Scanner(System.in); System.out.println("请输入手机号码进行拨打...");
String number = scanner.nextLine(); iPhone = Phone.getInstance();
// 打电话动作
iPhone.call(PhoneConfig.contactsName, number)
.callErrorListener(callError)
.callWhetherAnswerListener(callWhetherAnswer)
.callSuccessListener(callAnswer)
.callRefuseListener(callRefuse)
.onClickCall();
} /**
* 监听拨打出错的业务处理
* (注意:这里本应该不需要写 static静态,
* 由于 main测试程序是main,所以才写static)
*/
private static OnCallError callError = new OnCallError() { public void callError(String error) {
System.out.println(error);
}
}; /**
* 监听是否接听拨打者的电话
* (注意:这里本应该不需要写 static静态,
* 由于 main测试程序是main,所以才写static)
*/
private static OnCallWhetherAnswer
callWhetherAnswer = new OnCallWhetherAnswer() { public void whetherAnswer(String whetherAnswer) {
System.out.println(whetherAnswer);
String isAnswer = scanner.nextLine();
if ("j".equals(isAnswer)) {
iPhone.successCall();
} else {
iPhone.refuseCall();
}
}
}; /**
* 监听成功接听拨打者的电话
* (注意:这里本应该不需要写 static静态,
* 由于 main测试程序是main,所以才写static)
*/
private static OnCallSuccess callAnswer = new OnCallSuccess() { public void callSuccess(String success) {
System.out.println(success);
}
}; /**
* 监听被挂断
* (注意:这里本应该不需要写 static静态,
* 由于 main测试程序是main,所以才写static)
*/
private static OnCallRefuse callRefuse = new OnCallRefuse() { public void callRefuse(String callRefuse) {
System.out.println(callRefuse);
}
}; }

注意:我这这里用来四个接口监听,其实只需一个就可以了


谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,

刘德利CSDN博客, http://blog.csdn.net/u011967006

Java电话监听器【精品博客】的更多相关文章

  1. JAVA课设个人博客--多源数据教学管理系统

    JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...

  2. 2015-2016-2 《Java程序设计》 学生博客及Git@OSC 链接

    2015-2016-2 <Java程序设计> 学生博客及Git@OSC 链接 博客 1451 20145101王闰开 20145102周正一 20145103冯文华 20145104张家明 ...

  3. Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)

    #Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...

  4. JAVA课程设计——团队博客

    JAVA课程设计--团队博客 1. 团队名称.团队成员介绍(需要有照片) 团队名称:"小羊吃蓝莓"小游戏 团队成员介绍: 成员 班级 学号 廖怡洁 网络1513 201521123 ...

  5. 《Java 程序设计》团队博客第十一周(第一次)

    <Java 程序设计>团队博客第十一周(第一次) 团队项目 1.项目内容.目标 项目内容 本组的团队项目准备实现一个有关于大富翁有的游戏程序. 大富翁游戏,以经营权为主要的游戏方式,通过购 ...

  6. java高并发_博客-网址-资料 推荐

    大概说一下自己作为入门学习java高并发的博客地址,很不错在自己的博客里记录一下:如果能有刷到我的博客的骚年,又刚好想了解java高并发,强烈推荐看看 地址:http://www.itsoku.com ...

  7. Java集合 - 明的博客

    "In this world there are only two tragedies. One is not getting what one wants, and the other i ...

  8. Java面向接口编程【精品博客】

    我们从生活中去理解面向接口编程,以下举例四个案例来理解: 案例一(汽车案例): /** * 汽车标准接口 * @author Liudeli */ public interface ICar { /* ...

  9. java课程设计团队博客

    java课程设计 本组主题:Calculator(简易计算器) 功能要求:基本实现计算器的功能,可运行加.减.乘.除.求倒数.求平方根.求百分号运算.正负数运算等 一.团队介绍 团队名称:熬夜做不出随 ...

随机推荐

  1. Ansible 管理MySQL主从复制

    mysql_replication - 管理MySQL复制 1.3版新功能 概要 要求(在执行模块的主机上) 选项 例子 笔记 状态 支持 概要 管理MySQL服务器复制,从属,主状态获取和更改主控主 ...

  2. IDEA 码云 安装

    安装方式: 从IDEA插件仓库搜索Gitee下载并安装即可. 登陆并拉取项目代码 1. 启动 idea,选择Check out from Version Control-码云 2. 输入用户名和密码, ...

  3. print 不换行

    [print 不换行] 参考:http://zhidao.baidu.com/link?url=-qC2RyT5_GWzW_N-SyqJYgegVt2sSXwmMWGvHfk_4MjErhm_Pj23 ...

  4. MVC001之权限校验

    参考网址:http://bbs.csdn.net/topics/370002739 http://blog.csdn.net/chenloveyue/article/details/7095522 h ...

  5. Visual Studio 2008 简体中文正式版下载及序列号(无使用期限限制,正式版)

    VS2008中文试用版刚出来不久就上网拖了下来可是安装的时候却出问题了.后来,Google了下,把自己遇到的问题和解决方法跟大家分享.1.让试用版变成正式版    从Microsoft那下了7个压缩文 ...

  6. Intellij IDEA使用Maven搭建spark开发环境(scala)

    如何一步一步地在Intellij IDEA使用Maven搭建spark开发环境,并基于scala编写简单的spark中wordcount实例. 1.准备工作 首先需要在你电脑上安装jdk和scala以 ...

  7. 关于元表,self,元方法__index

    这是需要仔细分辨的几个概念. 元表:相当于table的隐藏属性. 只有固定的一些方法,如__index,__tostring,__add等,称为元方法. 虽然是固定的,但是任何table都可以作为任何 ...

  8. springboot自定义消息转换器HttpMessageConverter

    在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制就是利用HttpMessageCo ...

  9. 14-n皇后

    /*题目内容: 国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上,1970年与1971年, E.W.Dijkstr ...

  10. ContentProvider-------------自定义的内容提供者 然后去访问

    自定义提供者 import android.content.Context; import android.database.DatabaseErrorHandler; import android. ...