开车时接电话十分危险,这时可以考虑开发一款APP,拨打电话或接听电话时自动免提,原理也比较简单,监听电话接通状态,电话接通时打开扬声器即可,代码如下:

package demo.androidwar.com.test;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
AudioManager audioManager;
int currVolume;//当前音量
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
TelListner listener = new TelListner() ;
telManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
}
private class TelListner extends PhoneStateListener{
boolean comingPhone=false;//标识
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:/* 无任何状态 */
if(this.comingPhone){
this.comingPhone=false;
setSpeekModle(false);
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:/* 接起电话 */
this.comingPhone=true;
setSpeekModle(true);
break;
case TelephonyManager.CALL_STATE_RINGING:/* 电话进来 */
this.comingPhone=true;
setSpeekModle(true);
break;
}
}
}
void setSpeekModle(boolean open){
audioManager.setMode(AudioManager.ROUTE_SPEAKER);
currVolume = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
audioManager.setMode(AudioManager.MODE_IN_CALL);
if(!audioManager.isSpeakerphoneOn()&&open) {
audioManager.setSpeakerphoneOn(true);//开启免提
Toast.makeText(MainActivity.this,"免提模式",Toast.LENGTH_LONG).show();
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL),
AudioManager.STREAM_VOICE_CALL);
}else if(audioManager.isSpeakerphoneOn()&&open){
audioManager.setSpeakerphoneOn(false);
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,currVolume,
AudioManager.STREAM_VOICE_CALL);
}
}
}

需要配置权限,AndroidMainfest.xml文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="demo.androidwar.com.test">
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

运行项目实例,在真机上进行调试,我进行调试的机型有三星的Note3、S6 edge+和魅族都测试成功,唯独华为手机没有测试成功,希望有经验的读者留言告知原因,谢谢。

我的电子书上线了,欢迎阅读:

http://yuedu.baidu.com/ebook/284b41a1e518964bce847c90

喜欢的朋友可以关注我!

Android实战简易教程-第七十三枪(拨打、接听电话自动免提)相关推荐

  1. Android拨打接听电话自动免提

    权限: <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-p ...

  2. Android实战简易教程-第七十五枪(WIFI直连工具类)

    设置指定的WIFI用户名密码和加密方式,可以进行WIFI直连. 1.工具类-WifiUtil.java: package demo.androidwar.com.myapplication;impor ...

  3. Android实战简易教程-第五十枪(工具类的测试)

    在开发中,为了提高开发效率,我们一般会自定义自己的工具类.为了保证项目的可靠性,在将工具类引入项目之前,我们一般都会对工具类进行单元测试,下面我们通过一个实例看一下如何搭建测试环境. 1.首先自定义一 ...

  4. Android实战简易教程-第六十枪(分享一个城市选择功能模块)

    在做一些APP的时候可能会用到城市选择模块的功能,本实例可以提供位置自定定位和手动选择的功能,非常好用,大家可以修改后加入自己的项目中. 首先看一下效果: 1.进入有的手机可能会提示权限要求,这时我们 ...

  5. Android实战简易教程-第五十七枪(分享小米手电筒源码)

    手电筒功能实现简单很实用,下面我们就来研究一下如何自制一款手电筒小程序,初学者可以通过实例了解原理,提高学习android技术的热情和动力. 首先我们了解一下手电筒要调用哪些android权限: &l ...

  6. Android实战简易教程-第五十一枪(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)

    前段时间写过一篇文章:Android实战简易教程-第四十七枪(ListView多选-实现点餐系统)有的同学留言建议,可不可以动态控制checkbox的显示和全选反选功能,我研究了一下,发现实现也比较容 ...

  7. Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)

    用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以 ...

  8. Android实战简易教程-第三十六枪(监听短信-实现短信验证码自动填入)

    一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验. 首先我们看一下如何监听 ...

  9. Android实战简易教程-第六十六枪(服务器端搭建和服务器端Json数据交互)

    学习Android有一段时间了,对服务器端有很深的好奇,决定对服务器端的实现进行一些研究,这里实现了一个简单的小例子,用于获取服务器端的json数据,例子很简单,适合初学者学习使用. 服务器端 首先我 ...

  10. Android实战简易教程-第六十五枪(自定义控件实现数字液晶时钟Demo)

    下面我们研究一下如何实现一个数字液晶时钟,本质属于特效一种哈. 首先创建一个布局文件: <?xml version="1.0" encoding="utf-8&qu ...

最新文章

  1. c++程序影像读取_应急响应手册程序执行痕迹
  2. 前端每日实战:93# 视频演示如何用纯 CSS 创作一根闪电连接线
  3. 精心分享7个让你意想不到的网站,大开眼界!
  4. 余承东:国内用华为P40 Pro+就能拍照测体温,还很精准
  5. pom.xml配置文件中所有标签及作用简单描述
  6. 转专业入门NLP,这样学就对了
  7. Access数据库查询练习专用数据库 -手机号码归属地Access数据库_MobileDB(10万条记录)...
  8. 手机安装python的步骤_小白入门:Python安装的10个步骤,极其细致!!
  9. php对帖子分类,php – MySQL:从类别中获取帖子
  10. UISwitch 添加 标签
  11. python 欠采样_数据科学家需要了解的 5 种采样方法
  12. signature=1982ab87dc2679ab32a4cc77dcd4ace3,Spin phonon coupling in frustrated magnet CdCr$_2$O$_4$
  13. java gzip压缩_Java GZIP示例–压缩和解压缩文件
  14. 带你玩转 Visual Studio——带你跳出坑爹的 Runtime Library 坑
  15. 逆向基础(一) | WooYun知识库
  16. java开发坦克大战小游戏
  17. 龙迅LT6911GX
  18. newifi路由器 php,newifi智能路由设置教程
  19. Sparql与sql的比较
  20. 我的世界java版指令保留物品栏_我的世界或将在模式切换中保存物品栏

热门文章

  1. 干货来啦!!!二十种Python代码游戏源代码分享
  2. struts(二)——struts框架实现的基本原理
  3. 安装java正在使用中_如何安装java,安装JDK,JAVA SE正在使用中,安装不了
  4. mac电脑安装mysql
  5. 最新摸头GIF在线生成工具源码+实测可用
  6. 数据结构C语言严蔚敏版(第二版)超详细笔记附带课后习题
  7. html5双日期时间选择控件,bootstrap daterangepicker双日历时间段选择控件详解
  8. 信息安全工程师(软考资料)
  9. 毕业论文查重以后如何降重?
  10. 软著【设计说明书】(软件著作权)