手机来电翻转静音功能,手机来电铃声响起,通过翻转手机是手机铃声变为静音状态。
下面是在incallUi应用中实现的翻转静音功能只贴了关键代码部分,
代码在ProximitySensor.java中实现。 代码中有注释如果需要移植到其它地方可以根据注释移植
操作步骤: 手机屏幕朝上,将手机屏幕由上而下翻转。(可根据需求改变操作)
//翻转静音变量声明 begin
private static final float CRITICAL_DOWN_ANGLE = -8.0f;
private static final float CRITICAL_UP_ANGLE = 8.0f;
private static final int SPEED_SHRESHOLD = 800;
private SensorManager mSensorManager;
private Sensor mGsensorAccelerometer;
private int mReverseDownFlg= -1;
private float lastX;
private float lastY;
private float lastZ;
private static final int UPTATE_INTERVAL_TIME = 70;
float tMax=1.0f;
float tMaxleft=0.1f;
boolean isLeftRight = false;
private long lastUpdateTime;
private static final String FLIP_TO_MUTE = "flip_to_mute_call";
SensorEventListener mySensorListener;
boolean disInRang = false;
int previousMuteMode = -1;
boolean mActFlag = false;
int previousRing = 0;
boolean isRing =false;
AudioManager am;
//翻转静音变量声明 end
public ProximitySensor(Context context, AudioModeProvider audioModeProvider,
AccelerometerListener accelerometerListener) {
mContext = context;
mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (mPowerManager.isWakeLockLevelSupported(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK)) {
mProximityWakeLock = mPowerManager.newWakeLock(
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, TAG);
} else {
Log.w(TAG, "Device does not support proximity wake lock.");
mProximityWakeLock = null;
}
mAccelerometerListener = accelerometerListener;
mAccelerometerListener.setListener(this);
mDisplayListener = new ProximityDisplayListener(
(DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE));
mDisplayListener.register();
mAudioModeProvider = audioModeProvider;
mAudioModeProvider.addListener(this);
//翻转静音变量初始化 begin
am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
mSensorManager= (SensorManager) mContext.getSystemService(Service.SENSOR_SERVICE);
mGsensorAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//获取加速度传感器
mSensorManager.registerListener(mGsensorListener, mGsensorAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); //注册传感器获取监听
//翻转静音变量初始化 end
}
//传感器监听
SensorEventListener mGsensorListener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
TelecomManager telecomManager = getTelecommService();//获取telecom对象
if (telecomManager != null && telecomManager.isRinging()) {//判断当前是否响铃
isRing = true;
}else{//电话状态不再是响铃状态
isRing = false;
Log.d(TAG, "telecomManager not ring ");
return;
}
long currentUpdateTime = System.currentTimeMillis();
long timeInterval = currentUpdateTime - lastUpdateTime;
lastUpdateTime = currentUpdateTime;
float x = event.values[SensorManager.DATA_X];
float y = event.values[SensorManager.DATA_Y];
float z = event.values[SensorManager.DATA_Z];
float deltaX = x - lastX;
float deltaY = y - lastY;
float deltaZ = z - lastZ;
float absx = Math.abs(x);
float absy = Math.abs(y);
float absz = Math.abs(z);
lastX = x;
lastY = y;
lastZ = z;
double speed = Math.sqrt(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ)/timeInterval * 10000;
if(event.values[SensorManager.DATA_Z] >= CRITICAL_UP_ANGLE ){ //屏幕竖直朝上
mReverseDownFlg = 0;
} else if(event.values[SensorManager.DATA_Z] <= CRITICAL_DOWN_ANGLE
&&mReverseDownFlg ==0){ //屏幕竖直朝下
mReverseDownFlg = 1;
}
if (absx > absy && absx > absz) {
if (x > tMax) {
isLeftRight = true;
Log.d(TAG, "turn left"+" isLeftRight = "+isLeftRight);//手机向左边翻转
} else if(x < -tMax){
isLeftRight = true;
Log.d(TAG, "turn right"+" isLeftRight = "+isLeftRight);//手机向右边翻转
}
}else if (absy > absx && absy > absz) {
if (y > tMax) {
isLeftRight = true;
Log.d(TAG, "turn up"+" isLeftRight = "+isLeftRight);//手机竖直翻转头向上
} else if(y<-tMax){
isLeftRight = true;
Log.d(TAG, "turn down"+" isLeftRight = "+isLeftRight);//手机竖直翻转头向下
}
}else if (absz > absx && absz > absy) {
if (z > 0) {
isLeftRight = true;
Log.d(TAG, "screen up");//手机屏幕向上
} else {
if(isLeftRight && mReverseDownFlg ==1){
if(Settings.System.getInt(mContext.getContentResolver(),FLIP_TO_MUTE, 1) == 1){
telecomManager.silenceRinger();//判断为屏幕有上翻转到下,响铃静音
Log.d(TAG, "onSensorChanged set slince");//手机屏幕向下
isLeftRight = false;
Log.d(TAG, "screen down -------------------------->");
}
}
Log.d(TAG, "screen down"+" isLeftRight = "+isLeftRight);
}
}else {
android.util.Log.e("origen", "unknow action"+" isLeftRight = "+isLeftRight);
}
}
};
TelecomManager getTelecommService() {
if(mContext != null)
return (TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);
return null;
}
public void tearDown() {
mAudioModeProvider.removeListener(this);
mAccelerometerListener.enable(false);
mDisplayListener.unregister();
turnOffProximitySensor(true);
//取消注册监听加速度传感器
if(mSensorManager != null){
mSensorManager.unregisterListener(mGsensorListener);
mSensorManager = null;
}
}

手机来电翻转静音功能相关推荐

  1. android 5.1中添加来电翻转静音的功能

    网上关于来电翻转静音的功能有很多实现,但大同小以异,下面主要记录以下几点: 1.settting中添加控制. 2.Dialer中添加具体的功能实现. 3.AudioManager实现完成静音. 首先, ...

  2. android settings模块中添加来电反转静音功能

    最近由于项目需要,添加来点反转静音功能,先将代码写出来,往大家给点意见 1.首先是一个主要的服务类,service package com.create.wxb; import java.util.L ...

  3. Android 来电翻转静音实现源码

    1.添加实现文件: alps\packages\apps\InCallUI\src\com\android\incallui\SensorFunctionServiceIncall.java /** ...

  4. Android之翻转静音

    在Android系统框架里实现翻转静音: 利用java的观察者模式可以轻松实现来电翻转静音: 服务类程序代码: package com.example.smartcalltest;import and ...

  5. android增加来电闪光灯功能吗,苹果/安卓手机闪光灯提醒功能:手机来电闪光灯提醒怎么设置?...

    为了不影响身边的朋友.同事,相信许多人在室内使用手机的时候,都会自觉打开静音模式.不过静音模式也让不少朋友感到烦恼,手机放在桌面.裤兜都有可能错过重要电话和消息,那么有没有可以代替铃声的方法呢?现在不 ...

  6. oppo手机计算机的隐藏功能介绍,OPPO手机6大隐藏功能,你知道吗

    其实手机的功能远要比你想象的多要多,只是我们很多人都不知道而已.就拿OPPO手机来说吧,OPPO手机有6大隐藏功能,你们知道吗?若是不知道的话,就随小编一同去了解下吧! OPPO手机6大隐藏功能,你知 ...

  7. vivo计算机的隐藏功能介绍,vivo手机有哪些隐藏功能?这6个功能实在太好用了,要悄悄用起来...

    不少年轻人在选择手机的时候,会选择vivo手机,为什么vivo手机那么受年轻人的喜欢和欢迎呢?大概是因为vivo手机拥有很多好用的隐藏的功能. 那么vivo手机有哪些隐藏功能呢?别急,今天小编给大家带 ...

  8. 华为手机怎么隐藏按键图标_华为手机8个隐藏功能,快来看看有没有你不知道的...

    现在使用华为手机的人越来越多,华为手机也凭借自己强大的性能和功能收割了无数花粉,很多人虽然用着华为手机,但是并没有对手机有过多的深入研究,其实华为手机是有很多隐藏功能的,而这些功能往往都是非常实用的, ...

  9. iOS 8 Beta 2加入来电归属地功能

    [IT168 资讯]距离推出iOS 8开发者版仅两周,苹果公司现在正式向广大开发者发布了iOS 8系统的第二个测试版beta 2,编译版本号为12A4297e.除了修复了beta版本此前出现的一些BU ...

最新文章

  1. Httpclient学习日记(一)
  2. SpendidCRM:在admin-layout中修改了视图上的字段后,用MyGeneration生成修改脚本
  3. 一流大学计算机专业,计算机专业一流大学太难考,不妨退而求其次,看看这5所大学...
  4. SpringCloud微服务(05):Zuul组件,实现路由网关控制
  5. html帧内容,html将内容从一个帧移动到另一个帧
  6. computational science education project
  7. SAP License:两种不太常见的移动类型
  8. python没有main函数的概念吗_为什么Python没有main函数?
  9. fzu 2204 7 dp
  10. Windows上将linux目录映射网络驱动器
  11. pythonturtle库填充_python turtle库笔记
  12. 怎样看oracle删掉没有,肿么查看以前Oracle卸载干净没
  13. 如何开发一个酷炫的mdx
  14. 复杂度应对之道 - COLA应用架构
  15. MATLAB在动态经济学中的应用,MATLAB在动态经济学中的应用
  16. STM32驱动开发(二)--USB Device RNDIS虚拟网卡(usb hound抓包完整数据流分析)
  17. Matlab中实现圆形矩阵,圆外为0
  18. Cisco Packet Tracer交换机间相同VLAN通信
  19. 下行控制信息 - 上行DCI
  20. c语言设计程序计算器,C语言程序设计,做一个简单计算器

热门文章

  1. 音乐处理软件cubase pro11完整版
  2. grafana9 使用消息模板配置发送企业微信(wecom)
  3. 反射大师怎么使用_很多客户问:光电传感器怎么才能稳定检测黑色目标物?
  4. 跌宕起伏的ETC巨头金溢科技,晚年惨遭微信、支付宝截胡
  5. opencvShrap的PutText函数输出中文
  6. CAYEE——INS803
  7. matlab的三条线如何区分,股票的三条线代表什么意思?股票k线图中的三条线如何判断...
  8. MIUI10.3及以上最新版本 冰箱Ice Box的激活
  9. rto净化效率计算公式_管理效率计算公式
  10. 请真诚相待,珍惜你的爱人