【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )

简介: 【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )

文章目录

一、获取 WIFI 状态

二、主动获取 WIFI 状态

三、被动获取 WIFI 状态



参考 Google 官方文档 : 优化电池续航时间






一、获取 WIFI 状态


在应用中执行某些操作 , 如软件云端备份 , 从服务器端获取最新版本号 , 从服务器端缓存最新软件安装包 , 固件版本 , 等操作 , 最好都在 WIFI 状态下执行 , 获取 WIFI 的状态也是两种情况 , 分别是主动获取 WIFI 状态 , 被动获取 WIFI 状态 ;


上述操作 , 也建议在手机上充电的状态下执行 ;






二、主动获取 WIFI 状态


1 . 获取 WIFI 状态 : WIFI 状态可以使用 ConnectivityManager 获取 , 调用 getActiveNetworkInfo 方法获取 NetworkInfo 后 , 先判定当前网络是否连接 , 再判断当前的 网络类型 是否是 ConnectivityManager.TYPE_WIFI ;



① 获取连接管理器 : 调用 Context 上下文的

getSystemService(Context.CONNECTIVITY_SERVICE) 方法 , 跨进程获取 ConnectivityManager 服务 ;
        // 获取连接管理器
        ConnectivityManager connectivityManager =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);


② 获取网络信息 : 调用 ConnectivityManager 的 getActiveNetworkInfo 方法 , 获取当前网络信息 , 该操作需要 android.Manifest.permission.ACCESS_NETWORK_STATE 权限 ;


NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

③ 判断当前是否已经连接 : 调用 NetworkInfo 对象的 isConnected 方法 , 可以查看该网络的连接状态 , WIFI , 移动蜂窝网络 等有一种连接 , 就会返回 True ;


networkInfo.isConnected()


④ 判断连接类型 : 调用 NetworkInfo 对象的 getType() 方法 , 可以获取当前的连接状态 , 如果连接状态是 ConnectivityManager.TYPE_WIFI , 就说明当前是 WIFI 网络 ;


networkInfo.getType() == ConnectivityManager.TYPE_WIFI
1



2 . 代码示例 :


package kim.hsl.bp;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class WiflUtils {
    /**
     * 主动获取当前是否正在使用 WIFI
     * @return
     */
    public static boolean isWifi(Context context){
        boolean isWifi = false;
        // 获取连接管理器
        ConnectivityManager connectivityManager =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        // 获取网络信息
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        // 判定是否是 WIFI
        if(networkInfo != null && networkInfo.isConnected() &&
                networkInfo.getType() == ConnectivityManager.TYPE_WIFI){
            isWifi = true;
        }
        return isWifi;
    }
}






三、被动获取 WIFI 状态


1 . 广播接收者 : 该广播接收者监听系统的 android.intent.action.CONNECTIVITY_CHANGE 事件 , 当接收到系统发出的广播后 , 就判定一次当前是否是 WIFI 状态 ;


package kim.hsl.bp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
/**
 * 被动获取网络状态
 * 网络状态发生变化时 , 系统发出的广播 , 使用广播接受者接收这些广播
 */
public class WifiReceiver extends BroadcastReceiver {
    public static final String TAG = "WifiReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        boolean isWifi = WiflUtils.isWifi(context);
        if(isWifi){
            Log.i(TAG, "WIFI 启用");
        }else{
            Log.i(TAG, "WIFI 停用");
        }
    }
}




2 . 注册广播接收者与权限 : 在 AndroidManifest.xml 中 , 注册上述广播接收者 , 声明使用到的网络相关权限 ;


ACCESS_NETWORK_STATE : 获取运营商信息权限 ;
ACCESS_WIFI_STATE : 获取 WIFI 网络信息权限 ;
CHANGE_WIFI_STATE : 获取改变 WIFI 状态权限 ;
INTERNET : 获取访问网络权限 ;
READ_PHONE_STATE : 读取手机状态权限 ;
WAKE_LOCK : 后台服务保持唤醒权限 ;
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="kim.hsl.bp">
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        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>
        <receiver android:name=".BatteryReceiver" >
            <intent-filter>
                <!-- 充电线插上 -->
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
                <!-- 充电线拔出 -->
                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
            </intent-filter>
        </receiver>
        <receiver android:name=".WifiReceiver" >
            <intent-filter>
                <!-- 网络状态改变 -->
                <action android:name="android.intent.action.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>
    </application>
</manifest>




目录
相关文章
|
4月前
|
网络协议 网络虚拟化 网络架构
【第一期】大话计算机网络(猫、路由器、wifi)
【第一期】大话计算机网络(猫、路由器、wifi)
56 1
【第一期】大话计算机网络(猫、路由器、wifi)
|
4月前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
49 3
|
5月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
92 20
Android经典面试题之图片Bitmap怎么做优化
|
4月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
90 4
|
3月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统的差异性及优化策略
在当今数字化时代,移动操作系统的竞争尤为激烈,其中iOS和Android作为市场上的两大巨头,各自拥有庞大的用户基础和独特的技术特点。本文旨在通过对比分析iOS与Android的核心差异,探讨各自的优势与局限,并提出针对性的优化策略,以期为用户提供更优质的使用体验和为开发者提供有价值的参考。
|
5月前
|
Java Android开发 开发者
安卓应用开发中的线程管理优化技巧
【9月更文挑战第10天】在安卓开发的海洋里,线程管理犹如航行的风帆,掌握好它,能让应用乘风破浪,反之则可能遭遇性能的暗礁。本文将通过浅显易懂的语言和生动的比喻,带你探索如何优雅地处理安卓中的线程问题,从基础的线程创建到高级的线程池运用,让你的应用运行更加流畅。
|
5月前
|
Java Android开发 UED
安卓应用开发中的内存管理优化技巧
在安卓开发的广阔天地里,内存管理是一块让开发者既爱又恨的领域。它如同一位严苛的考官,时刻考验着开发者的智慧与耐心。然而,只要我们掌握了正确的优化技巧,就能够驯服这位考官,让我们的应用在性能和用户体验上更上一层楼。本文将带你走进内存管理的迷宫,用通俗易懂的语言解读那些看似复杂的优化策略,让你的开发之路更加顺畅。
99 2
|
5月前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
116 0
|
5月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
199 0
|
6月前
|
存储 缓存 前端开发
安卓开发中的自定义控件实现及优化策略
【8月更文挑战第31天】在安卓应用的界面设计中,自定义控件是提升用户体验和实现特定功能的关键。本文将引导你理解自定义控件的核心概念,并逐步展示如何创建一个简单的自定义控件,同时分享一些性能优化的技巧。无论你是初学者还是有一定经验的开发者,这篇文章都会让你对自定义控件有更深的认识和应用。

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 6
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 7
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 9
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 10
    基于昇腾用PyTorch实现传统CTR模型WideDeep网络