热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android编程实现添加低电流提醒功能的方法

这篇文章主要介绍了Android编程实现添加低电流提醒功能的方法,涉及Android广播监听及电源监控等相关操作技巧,需要的朋友可以参考下

本文实例讲述了Android编程实现添加低电流提醒功能的方法。分享给大家供大家参考,具体如下:

特殊需求,检测电流是否正常。

监听如下广播:

Intent.ACTION_BATTERY_CHANGED
plugType = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
if(mLowElectricityRemind == null){
  mLowElectricityRemind = new LowElectricityRemind(BatteryMeterView.this.getContext());
}
mLowElectricityRemind.changePlugType(plugType);

添加LowElectricityRemind类

package com.android.systemui;
import android.content.Context;
import android.content.DialogInterface;
import android.os.BatteryManager;
import android.os.Handler;
import android.util.Slog;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import com.android.systemui.statusbar.phone.SystemUIDialog;
/**
 * add low electricity remind
 * Created by fanlj on 2017-2-18.
 */
public class LowElectricityRemind {
  private static final String TAG = LowElectricityRemind.class.getSimpleName();
  private static final int LOW_ELECTRICITY_REMIND_DELAYED = 50000;
  private static final long REMIND_INTERVAL = 3 * 1000 * 60; //Three minutes
  private static final int MAX_CURRENT_COUNT = 3;
  private static final boolean DEBUG = true;
  private boolean isFirstInitialize = true;
  private Context mContext;
  private Handler mHandler;
  private int[] mCurrent = new int[MAX_CURRENT_COUNT];
  private File mCurrentNowFile = null;
  private SystemUIDialog mRemidDialog;
  private long mLastPlugCurrent = 0;
  private long mLastRemindTime = 0; //if mRemidDialog is showed, mLastRemindTime != 0
  private boolean isIgnore = false;
  LowElectricityRemind(Context context){
    mCOntext= context;
    mHandler = new Handler();
    mCurrentNowFile = new File("/sys/class/power_supply/battery/current_now");
  }
  public void changePlugType(int type){
    if(DEBUG) {
      Slog.e(TAG, "change plug type to " + type);
    }
    mHandler.removeCallbacks(lowElectricityRemindRunnable);
    if(type == BatteryManager.BATTERY_PLUGGED_AC || (DEBUG && type == BatteryManager.BATTERY_PLUGGED_USB)){
      if(DEBUG) {
        Slog.e(TAG, "start runnable");
      }
      if(isFirstInitialize){
        isFirstInitialize = false;
      }
      mHandler.postDelayed(lowElectricityRemindRunnable, LOW_ELECTRICITY_REMIND_DELAYED);
    } else {
      cleanAllCache();
    }
  }
  private Runnable lowElectricityRemindRunnable = new Runnable() {
    @Override
    public void run() {
      if(!needShowRemindDialog(true)){
        postDelayed();
        return;
      }
      boolean isFull = true;
      int cbattNow = readCurrent();
      if(mLastPlugCurrent == cbattNow){
        postDelayed();
        return;
      }
      mLastPlugCurrent = cbattNow;
      if(mCurrent[MAX_CURRENT_COUNT - 1] != 0){
        int minIndex = 0;
        int maxIndex = 0;
        for (int i = MAX_CURRENT_COUNT; i > 1; i--){
          int curr = mCurrent[i];
          if(mCurrent[minIndex] > curr){
            minIndex = i;
          }
          if(mCurrent[maxIndex]  0 && min > cbattNow)){ //-1600 <-1400 900 > 800 if true, replace min value.
            mCurrent[minIndex] = cbattNow;
          } else if((max <0 && max  0 && max > cbattNow)){ //-1600 <-1400 900 > 800
            mCurrent[maxIndex] = cbattNow;
          }
        }
      } else {
        for (int i = 0; i 
            var cpro_id = "u6885494";

        
        
    
推荐阅读
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 原理:dismiss再弹出,把dialog设为全局对象。if(dialog!null&&dialog.isShowing()&&!(Activity.)isFinishing()) ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • linux 禁止指定ip访问
    linux中如何禁止指定的ip访问呢?比如被别人暴力破解,被别人使用不同的密码尝试登录:所以我想直接禁用这些ip的访问.怎么办呢?解决方案:修改配置文件etchosts.deny把 ... [详细]
  • 一、修改注册表去掉桌面图标小箭头1按下win+R组合快捷键,打开windows10系统的“运行”窗口,输入“regedit”,打开注册表编辑器,找到HKEY_CLASSES_ROOT\lnkfi ... [详细]
author-avatar
凉情__凉心凉少年11
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有