自定义系统电池,自定义系统信号强度,自定义系统状态栏

介绍

---
1. 自定义系统状态栏,时间,电量,信号强度实时更新 自定义主题
2. 自定义电量图标(低电量变红)
2. 自定义信号强度图标(自定义信号大小颜色等)

github

示例

 

可下载APK直接体验

 

Demo

 

一、自定义系统状态栏,时间,电量,信号强度实时更新

 

 注册广播


/**
     * 注册广播监听
     */
    public void registerStatusBarReceiver() {
        mContext.registerReceiver(mReceiver, mFilter);
        mMobileSignalStrengthListener = new MobileSignalStrengthListener();
        mTelephonyManager.listen(mMobileSignalStrengthListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
    }

    /**
     * 取消广播监听
     */
    public void unregisterStatusBarReceiver() {
        mContext.unregisterReceiver(mReceiver);
        mTelephonyManager.listen(mMobileSignalStrengthListener, PhoneStateListener.LISTEN_NONE);
    }

 广播内容

 private void initData(Context context) {

        mContext = context;

        mFilter = new IntentFilter();
        mFilter.addAction(Intent.ACTION_TIME_TICK);
        mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        mFilter.addAction(LocationManager.PROVIDERS_CHANGED_ACTION);
        mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
        mFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
        mFilter.addAction("android.media.VOLUME_CHANGED_ACTION");



        mHandler = new Handler();
        mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
        mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
        mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);


        mReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();

                switch (action) {
                    //时间广播
                    case Intent.ACTION_TIME_TICK:
                        updateTaskStatus(SystemStatusConstant.TASK_STATUS_CONTINUE);
                        break;
                    //网络连接状态(网络切换,网络开关)
                    case ConnectivityManager.CONNECTIVITY_ACTION:
                        updateNetWorkStatus();
                        break;
                    //WiFi信号强度变化
                    case WifiManager.RSSI_CHANGED_ACTION:
                        mHandler.removeCallbacks(mSignalStrengthChangeRunnable);
                        mHandler.postDelayed(mSignalStrengthChangeRunnable, UPDATE_MIN_INTERVAL);
                        break;
                    //GPS连接状态(Gps开关)
                    case LocationManager.MODE_CHANGED_ACTION:
                    case LocationManager.PROVIDERS_CHANGED_ACTION:
                        updateGpsStatus();
                        break;
                    //电量变化
                    case Intent.ACTION_BATTERY_CHANGED:
                        int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
                        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0);
                        int percentage = (level * 100) / scale;
                        updateBatteryStatus(percentage);
                        break;
                    //音量变化
                    case "android.media.VOLUME_CHANGED_ACTION":
                        updateVolumeStatus();
                        break;
                    default:
                        break;
                }
            }
        };

        //初始化各个状态, 电量不需要刻意初始化
        updateTaskStatus(SystemStatusConstant.TASK_STATUS_OK);
        updateNetWorkStatus();
        updateGpsStatus();
        updateVolumeStatus();

    }

网络信号

/**
     * 刷新网络信号状态
     */
    private void updateNetWorkStatus() {

        String networkType = SystemStatusUtils.getNetworkType(mContext);

        int status;

        switch (networkType) {
            case "WIFI":
                status = getWifiLevel();
                break;
            case "2G":
            case "3G":
            case "4G":
                status = getMobileLevel();
                break;
            default:
                status = SystemStatusConstant.NET_STATUS_LOST;
                networkType = "无信号";
                break;
        }


        //没信号时,发送广播警告
        if (networkType.equals("无信号")) {
            SystemStatusUtils.sendBroadcast(mContext, SystemStatusConstant.Action.NET_STATUS,
                    SystemStatusConstant.EXTRA.NET_STATUS_EXTRA, status);
        }

        mSystemStatusView.refreshSignalView(networkType, status);

    }

/**
     * 获取wifi连接的强度状态
     *
     * @return
     */
    private int getWifiLevel() {

        int rssi = mWifiManager.getConnectionInfo().getRssi();
        //WIFI信号最强
        if (rssi > -70) {
            return SystemStatusConstant.NET_STATUS_OK;
        } else if (rssi < -90 && rssi > -70) {
            //WIFI信号较弱
            return SystemStatusConstant.NET_STATUS_WEAK;
        } else {
            //WIFI信号微弱
            return SystemStatusConstant.NET_STATUS_LOST;
        }

    }

    /**
     * 获取蜂窝连接的强度状态
     *
     * @return
     */
    private int getMobileLevel() {

        int level = SystemStatusConstant.NET_STATUS_OK;

        if (mMobileSignalStrengthListener == null
                || mMobileSignalStrengthListener.getSignalStrength() == null) {
            return level;
        }

        String signalStrength = mMobileSignalStrengthListener.getSignalStrength().toString();
        String[] parts = signalStrength.split(" ");

        switch (mTelephonyManager.getNetworkType()) {
            //移动联通2G
            case TelephonyManager.NETWORK_TYPE_GPRS:
            case TelephonyManager.NETWORK_TYPE_EDGE:
                level = SystemStatusUtils.getGsmLevel(parts);
                break;
            //电信2G
            case TelephonyManager.NETWORK_TYPE_CDMA:
            case TelephonyManager.NETWORK_TYPE_1xRTT:
                break;
            //4G网络
            case TelephonyManager.NETWORK_TYPE_LTE:
                level = SystemStatusUtils.getLteLevel(parts);
                break;
            //移动3G网络
            case TelephonyManager.NETWORK_TYPE_HSDPA:
                level = SystemStatusUtils.getSdcdmaLevel(parts);
                break;
            default:
                level = SystemStatusConstant.NET_STATUS_OK;
                break;
        }

        return level;

    }

GPS状态

/**
     * 刷新Gps状态
     */
    private void updateGpsStatus() {

        int status;

        if (SystemStatusUtils.isGPSOn(mContext)) {
            status = SystemStatusConstant.GPS_STATUS_OK;
        } else {
            status = SystemStatusConstant.GPS_STATUS_CLOSED;
        }


        //发送无GPS警告广播
        if (status == SystemStatusConstant.GPS_STATUS_CLOSED) {
            SystemStatusUtils.sendBroadcast(mContext, SystemStatusConstant.Action.GPS_STATUS,
                    SystemStatusConstant.EXTRA.GPS_STATUS_EXTRA, SystemStatusConstant.GPS_STATUS_CLOSED);
        }


        mSystemStatusView.refreshGpsView(status);
    }

音量

/**
     * 刷新媒体音量
     */
    private void updateVolumeStatus() {

        int curVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        double maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

        double percentage = curVolume / maxVolume;

        //低音量警告通知
        if (percentage < 0.5) {
            SystemStatusUtils.sendBroadcast(mContext, SystemStatusConstant.Action.VOLUME_STATUS,
                    SystemStatusConstant.EXTRA.VOLUME_STATUS_EXTRA, curVolume);
        }

        mSystemStatusView.refreshVolumeView(curVolume, maxVolume);

    }

只贴出部分源码,详情请查看源码库

二、自定义电池 (低电量变红)

 @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setAntiAlias(true);// 去锯齿
        paint.setColor(ContextCompat.getColor(mContext, R.color.zly_color_Grey100));// 设置画笔颜色
        float headWidth = width / 20.0f;// 电池头宽度

        // 画边框
        paint.setStyle(Paint.Style.STROKE);// 设置空心矩形
        paint.setStrokeWidth(border);
        RectF rect_1 = new RectF(border / 2, border / 2, width - headWidth - border / 2, height - border / 2);
        canvas.drawRoundRect(rect_1, radius, radius, paint);

        // 画电池头
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(0);
        RectF rect_2 = new RectF(width - headWidth - border / 2, height * 0.25f, width, height * 0.75f);
        canvas.drawRect(rect_2, paint);

        // 画电量
        if (isCharge) {
            paint.setColor(Color.WHITE);
        } else {
            if (mPower < 20) {
                paint.setColor(Color.RED);
            } else {
                paint.setColor(Color.WHITE);
            }
        }
        float offset = (width - headWidth - border - margin) * mPower / 100.f;
        RectF rect_3 = new RectF(border + margin, border + margin, offset, height - border - margin);
        canvas.drawRoundRect(rect_3, radius, radius, paint);

    }

三、自定义信号强度

 @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        initSize();
        Log.i(TAG,"onDraw -- mRectWidth ="+mRectWidth+ "--mRectHeight="+mRectHeight);
        mPaint.setStrokeWidth(unitWidth);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        for (int i=0;i< signalMaximum;i++){
            if (i < signalLevel) {
                mPaint.setColor(levelColor);
                mPaint.setStyle(Paint.Style.FILL);
            } else {
                mPaint.setColor(primaryColor);
                mPaint.setStyle(Paint.Style.FILL);
            }
            float x = (float) (mRectWidth * (i + 0.5) + spacing);
            float y = (float) (mRectHeight * (signalMaximum - i)  * 0.1) ;
            Log.i(TAG,"onDraw -- x ="+x+ "--y="+y+ "--y="+(getHeight() * 0.5));
            canvas.drawLine(x,y,x,(float)(getHeight() * 0.5),mPaint);
        }
        if (!connected) {
            mPaint.setColor(primaryColor);
            mPaint.setStyle(Paint.Style.FILL);
            canvas.drawLine(
                    (float)(getWidth() * 0.2) ,
                    (float)(getHeight() * 0.1) ,
                    (float)(getWidth() * 0.8) ,
                    (float)(getHeight() * 0.6) ,
                    mPaint
            );
        }
    }

 LICENSE


MIT License

Copyright (c) 2018

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值