6572KK下栏状态栏增加来电闪烁开关
打开开关监听来电,来电时控制闪光灯闪烁
1、SystemUI/ext/src/com/mediatek/systemui/ext/QuickSettingsTileViewId.java
增加ID :
在 QuickSettingsTileViewId 方法中加上此开关的ID: ID_INCALL_FLASHING_LED,
2、SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
确认开关的位置
在 addSystemTiles 方法中加上要加入的 代码
private void addSystemTiles(ViewGroup parent, LayoutInflater inflater) {
...
addInCallFlashingLedTile(parent, inflater);
}
addInCallFlashingLedTile的具体实现
private void addInCallFlashingLedTile(ViewGroup parent, LayoutInflater inflater) {
final QuickSettingsBasicTile inCallFlashLed = new QuickSettingsBasicTile(mContext);
boolean enabled = Settings.System.getInt(mContext.getContentResolver(), "incall_flashing_led", 0) != 0; //开关默认关闭
if (enabled) {
inCallFlashLed.setImageResource(R.drawable.ic_incall_flashing_led_enabled);
} else {
inCallFlashLed.setImageResource(R.drawable.ic_incall_flashing_led_disenabled);
}
inCallFlashLed.setTextResource(R.string.quick_settings_incall_flashing_led);
inCallFlashLed.setTileViewId(QuickSettingsTileViewId.ID_INCALL_FLASHING_LED);
inCallFlashLed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean enabled = Settings.System.getInt(mContext.getContentResolver(), "incall_flashing_led", 0) != 0;
if (enabled) {
Settings.System.putInt(mContext.getContentResolver(), "incall_flashing_led", 0);
inCallFlashLed.setImageResource(R.drawable.ic_incall_flashing_led_disenabled);
} else {
Settings.System.putInt(mContext.getContentResolver(), "incall_flashing_led", 1);
inCallFlashLed.setImageResource(R.drawable.ic_incall_flashing_led_enabled);
}
}
});
parent.addView(inCallFlashLed);
}
图片和字符串资源需添加
3、SystemUI/src/com/android/systemui/SystemUIService.java
监听来电及打开摄像头闪光灯的关键代码
添加代码:
private static final long OPEN_DELAYED_TIME = 300; // 闪烁频率
private static final long CLOSE_DELAYED_TIME = 500;//间隔
private TelephonyManager mTelephonyManager;
private Camera mCamera;
private Parameters mParameter;
private Handler mFlashHandler;
private boolean mIsInCall = false;
private boolean mIsOpen = false;
private void initInCallFlashLed() {
mIsInCall = false;
mIsOpen = false;
if (true) {
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mTelephonyManager.listen(MyPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
mFlashHandler = new Handler();
}
}
private void releaseInCallFlashLed() {
if (mCamera != null) {
mCamera.stopPreview();
mCamera.release();
mParameter = null;
mCamera = null;
}
mFlashHandler.removeCallbacks(mFlashRunnable);
mTelephonyManager = null;
mFlashHandler = null;
}
@Override
public void onDestroy() {
super.onDestroy();
releaseInCallFlashLed();
}
private PhoneStateListener MyPhoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
mIsInCall = false;
closeFlashLight();
break;
case TelephonyManager.CALL_STATE_RINGING:
mIsInCall = true;
openFlashLight();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
closeFlashLight();
break;
}
}
};
private void openFlashLight() {
if (mIsInCall) {
try {
if(mCamera == null){
mCamera = Camera.open();
}
mCamera.startPreview();
mParameter = mCamera.getParameters();
boolean enabled = Settings.System.getInt(getContentResolver(), "incall_flashing_led", 0) != 0;
if (enabled) {
mFlashHandler.post(mFlashRunnable);
}
} catch (java.lang.RuntimeException e) {
Log.d(TAG, "openFlashLight=>error: " + e.toString());
}
}
}
private void closeFlashLight() {
if (mCamera != null) {
mCamera.stopPreview();
mCamera.release();
mParameter = null;
mCamera = null;
}
mFlashHandler.removeCallbacks(mFlashRunnable);
}
private Runnable mFlashRunnable = new Runnable() {
@Override
public void run() {
if (mIsOpen) {
mIsOpen = false;
if (mCamera != null && mParameter != null) {
mParameter.setFlashMode(Parameters.FLASH_MODE_OFF);
mCamera.setParameters(mParameter);
mFlashHandler.postDelayed(mFlashRunnable, OPEN_DELAYED_TIME);
}
} else {
mIsOpen = true;
if (mCamera != null && mParameter != null) {
mParameter.setFlashMode(Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(mParameter);
mFlashHandler.postDelayed(mFlashRunnable, CLOSE_DELAYED_TIME);
}
}
}
};
导入包:
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.os.Handler;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.content.Context;
import android.provider.Settings;
最后在onCreate()方法中加上 initInCallFlashLed();
public void onCreate() {
...
initInCallFlashLed();
}
注意在AndroidManifest.xml中加入权限:
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.CAMERA"/>
6572KK下栏状态栏增加来电闪烁开关相关推荐
- android增加来电闪光灯功能吗,苹果/安卓手机闪光灯提醒功能:手机来电闪光灯提醒怎么设置?...
为了不影响身边的朋友.同事,相信许多人在室内使用手机的时候,都会自觉打开静音模式.不过静音模式也让不少朋友感到烦恼,手机放在桌面.裤兜都有可能错过重要电话和消息,那么有没有可以代替铃声的方法呢?现在不 ...
- SystemUI 状态栏增加移动数据开启图标
原生设计中,移动数据图标只有在网络活动(下载/上传)时,才显示相应的小白色三角图标,如果没有网络活动则没有任何显示.需要在不活动时也显示灰色的三角图标. 系统导航栏中常见信号图标包括:SIM卡信号(移 ...
- android volte功能,Android 7.1 关于Volte新增加一些功能开关
7.1新增加功能开关(CarrierConfigManager) 1.默认不插卡紧急号码走ims,设置开关: // SetKEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY ...
- android增加来电闪光灯功能吗,安卓关于来电与短信闪光灯功能研究
手机来电或者通话时闪烁的LED效果,比较绚丽,找了机会,研究了一下.. 一 . 分析过程 1. 既然是闪光,那肯定是跟Light有关系了,于是乎,找到了一个LightService.java的文件 ...
- android下拉列表添加开关,下拉菜单界面增加了Nearby开关
适用产品: HUAWEI Mate 30(全网通版 8gb+256gb.移动定制版 6gb+128gb.全网通版 6gb+128gb.全网通版 8gb+128gb.移动定制版 8gb+128gb),H ...
- 给FootSwitch脚踏板增加静音开关
简 介: 对于USB接口的FootSwitch塑料静音脚踏版, 增加了架子鼓静音脚踏版,效果得到明显的提高. 这位之后进一步进行改造提供了经验. 关键词: USB,Footswitch,脚踏板,静音 ...
- Android悬浮窗滤镜,屏幕滤镜(PWM防闪烁)
屏幕滤镜(PWM防闪烁)app是一款不错的手机护眼工具,特别适合用户夜间在低亮度环境下游玩手机,不怕低亮度下PWM调光伤眼.屏幕滤镜让各位用户可以在夜晚睡觉前等场景更舒适地玩手机,需要的朋友赶紧下载吧 ...
- 第八篇:稳定性之提升团队潜意识【及时复盘、开关设计】
及时复盘 复盘,本是一个围棋术语.指下完棋,棋手重新摆一遍下棋的过程,探讨得失,总结有无更好的应对招数.而现在,这个词已经被泛化,许多企业把它赋予了管理学意义.联想最早引入"复盘" ...
- Android 8.0 状态栏信号显示、信号定制
之前发了下拉通知栏开关修改的一篇文章. 这篇文章呢,主要介绍一下Android状态栏信号图标显示的流程. 便于在Android源生上开发的碰到问题的朋友,希望能对读者有所帮助.内容可能比较长 首先还是 ...
最新文章
- matlab金属槽有限差分法程序,有限差分法MATLAB程序
- 配置ISA Server 2006 ×××使用户轻松连接内网
- 【Git笔记3】关于撤销、删除、恢复的那些事儿
- 用shell批量转储表
- VTK:libvtkGUISupportQt-6.3.so.1: cannot open shared object
- Ranger-AdminServer安装(开启Kerberos)
- PowerDesigner(三)-企业架构模型
- c语言自定义函数案例情景,第4周 C语言及程序设计提高例程-3 体验自定义函数...
- 2022年ADB 命令知多少?一文2000字详细 ADB 命令大全来啦
- 集线器与交换机的区别
- 3.0_Linux如何连接网络
- 小程序与公众号共用服务器端,小程序和公众号能否共用同一个数据库
- IJ下的JavaWeb的搭建
- 一个语法分析器的实现
- Linux压力测试工具—Siege命令
- Tailscale 开源版中文部署指南(支持无限设备数、自定义多网段 、自建中继等高级特性)...
- 微信小程序修改switch组件的大小
- el-select 内如何渲染彩色IconFont图标
- 计算机毕业设计springboot+vue基本微信小程序的水库巡检系统
- 渗透测试 学习笔记 思维导图
热门文章
- 双卡双待 android,支持双卡双待+运行Android 5.1系统 华为Mate 8或9月2日登场
- linux pptp 服务器搭建,Linux搭建pptp ***服务器
- @Validated注解校验
- NetCore使用Dapper查询数据
- 【linux】查看文件目录大小
- 基于显扬科技自主研发3D机器视觉HY-MX在卫浴柔性打磨中的应用
- java去掉两层双引号
- 恢复系统设置或计算机无法点击进入,系统还原步骤_教您系统还原操作方法
- 关于iOS提交审核的IDFA
- fel 文档_FEL诱导半导体材料非线性光吸收