1. 程式人生 > >android例項之——流量監控懸浮窗(實時網速的獲取)

android例項之——流量監控懸浮窗(實時網速的獲取)

前幾天想做一個類似於360流量監控懸浮窗的效果,可以實時顯示網速。

重要的讀取系統的流量檔案,檔案路徑/proc/self/net/dev

下面是複製下來的dev檔案

Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:    5200      48    0    0    0     0          0         0     5200      48    0    0    0     0       0          0
dummy0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
rmnet0: 43413730   45920    0    0    0     0          0         0  4447114   39247    0    0    0     0       0          0
rmnet1:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
rmnet2:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
rmnet3:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
rmnet4:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
rmnet5:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
rmnet6:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
rmnet7:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
  usb0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
 tunl0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
ip6tnl0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

其中/eth是乙太網資訊 tiwlan0 是 Wifi  rmnet0 是 GPRS

當然,對於不同的機型,檔案格式也可能不相同,可自行下載ES檔案瀏覽器檢視,並不在sd卡中,在根目錄下。

下面我們就來看看是怎麼讀取跟顯示的

首先是懸浮窗,佈局檔案如下:

[plain] view plaincopyprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="100dp"  
  4.     android:layout_height="wrap_content"  
  5.     android:orientation="horizontal" >  
  6.     <RelativeLayout  
  7.         android:id="@+id/rl_left"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content" >  
  10.         <ImageView  
  11.             android:id="@+id/img_float"  
  12.             android:layout_width="30dp"  
  13.             android:layout_height="30dp"  
  14.             android:src="@drawable/ic_launcher" />  
  15.         <ImageView  
  16.             android:id="@+id/img_close"  
  17.             android:layout_width="wrap_content"  
  18.             android:layout_height="wrap_content"  
  19.             android:src="@android:drawable/presence_busy"  
  20.             android:visibility="gone" />  
  21.     </RelativeLayout>  
  22.     <TextView  
  23.         android:id="@+id/tv_show"  
  24.         android:layout_width="wrap_content"  
  25.         android:layout_height="wrap_content"  
  26.         android:layout_alignParentRight="true"  
  27.         android:layout_centerVertical="true"  
  28.         android:paddingLeft="5dp"  
  29.         android:textColor="#ffff4444"  
  30.         android:textSize="15sp" />  
  31. </RelativeLayout>  
然後是自定義的懸浮窗顯示,位置可移動,單擊會出現關閉懸浮窗按鈕

程式碼如下:

[java] view plaincopyprint?
  1. publicclass FloatView extends View {  
  2.     WindowManager mWManger;  
  3.     WindowManager.LayoutParams mWManParams;  
  4.     public View view;  
  5.     //初始位置
  6.     privatefloat startX;  
  7.     privatefloat startY;  
  8.     //座標
  9.     privatefloat x;  
  10.     privatefloat y;  
  11.     //
  12.     privatefloat mTouchSatrtX;  
  13.     privatefloat mTouchStartY;  
  14.     //元件
  15.     public ImageView img_folat,img_close;  
  16.     public TextView tv_show;  
  17.     Context mContext;  
  18.     public FloatView(Context context) {  
  19.         super(context);  
  20.         this.mContext = context;  
  21.     }  
  22.     /** 
  23.      * 初始化mWManger,mWManParams 
  24.      */
  25.     publicvoid show(){  
  26.         mWManger = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);  
  27.         mWManParams = new WindowManager.LayoutParams();  
  28.         //設定LayoutParams的引數
  29.         mWManParams.type = 2002;//設定系統級視窗
  30.         mWManParams.flags |= 8;  
  31.         //調整懸浮窗到左上角
  32.         mWManParams.gravity = Gravity.TOP|Gravity.LEFT;  
  33.         //以螢幕左上角為源點,設定x,y
  34.         mWManParams.x = 0;  
  35.         mWManParams.y = 0;  
  36.         //懸浮窗的長寬資料
  37.         mWManParams.width = 80;  
  38.         mWManParams.height = 40;  
  39.         mWManParams.format = -3;//透明
  40.         //載入懸浮窗佈局檔案
  41.         view = LayoutInflater.from(mContext).inflate(R.layout.traffic_view, null);  
  42.         mWManger.addView(view, mWManParams);  
  43.         view.setOnTouchListener(new OnTouchListener() {  
  44.             /** 
  45.              * 改變懸浮窗位置 
  46.              */
  47.             @Override
  48.             publicboolean onTouch(View v, MotionEvent event) {  
  49.                 //獲取相對螢幕的位置,即以螢幕左上角為原點
  50.                 x = event.getRawX();  
  51.                 y = event.getRawY() - 25;//25為系統狀態列的高度
  52.                 //Log.e("初始位置", x+"======="+y);
  53.                 switch(event.getAction()){  
  54.                 case MotionEvent.ACTION_DOWN:  
  55.                     startX = x;  
  56.                     startY = y;  
  57.                     //獲取相對View的座標,以view的左上角為原點
  58.                     mTouchSatrtX = event.getX();  
  59.                     mTouchStartY = event.getY();  
  60.                     //Log.e("相對view的位置", mTouchSatrtX+"--------"+mTouchStartY);
  61.                     break;  
  62.                 case MotionEvent.ACTION_MOVE:  
  63.                     updatePosition();  
  64.                     break;  
  65.                 case MotionEvent.ACTION_UP:  
  66.                     updatePosition();  
  67.                     show_img_close();  
  68.                     mTouchSatrtX = mTouchStartY =0;  
  69.                     break;  
  70.                 }  
  71.                 returntrue;  
  72.             }  
  73.         });  
  74.         img_close = (ImageView) view.findViewById(R.id.img_close);  
  75.         /** 
  76.          * 關閉懸浮窗圖示點選事件 
  77. 相關推薦

    android例項——流量監控懸浮(實時獲取)

    前幾天想做一個類似於360流量監控懸浮窗的效果,可以實時顯示網速。 重要的讀取系統的流量檔案,檔案路徑/proc/self/net/dev 下面是複製下來的dev檔案 Inter-|   Receive                      

    Android實現流量統計和監控懸浮

    很多安全衛士類軟體都實現了網速監測功能,也算是一個比較實用的功能。Android下,TrafficStats類實現了對流量的統計。 static long getMobileRxBytes()//獲取通過Mobile連線收到的位元組總數,但不包含WiFi static

    Android無需權限顯示懸浮

    後來 phone ces app 桌面 ast 浮窗 提示 ESS TYPE_TOAST一直都可以顯示, 但是用TYPE_TOAST顯示出來的在2.3上無法接收點擊事件, 因此還是無法隨意使用. 下面是我之前研究後臺線程顯示對話框的時候記得筆記, 大家可以看看我們項目

    Android仿微信文章懸浮效果

    序言 前些日子跟朋友聊天,朋友Z果粉,前些天更新了微信,說微信出了個好方便的功能啊,我問是啥功能啊,看看我大Android有沒有,他說現在閱讀公眾號文章如果有人給你發微信你可以把這篇文章當作懸浮窗懸浮起來,方便你聊完天不用找繼續閱讀,聽完是不是覺得這叫啥啊,我大

    Android 自定義PopupWindow實現懸浮效果

      有時候我們需要在介面上彈出一個視窗,而Android中彈出窗體有兩種方式:一種是AlertDialog,另一種就是PopupWindow,AlertDialog的位置是固定的,而PopupWindow的位置可以任意指定。下面我們使用自定義的PopupWindow來完成以下的效果圖:

    Android自定義可移動懸浮,WindowManager.LayoutParams一些屬性介紹

    效果圖 thanks 首先介紹一下常見的WindowManager.LayoutParams常量屬性 layoutParams.flag int型別 常量介紹 FLAGS_CHANGED 用於表示fl

    android課程表控制元件、懸浮、Todo應用、MVP框架、Kotlin完整專案原始碼

    Android精選原始碼 Android遊戲2048 MVP Kotlin專案(RxJava+Rerotfit+OkHttp+Glide) Android基於自定義Span的富文字編輯器 android課程表控制元件效果原始碼 Dagger、Clean、MVP框架搭建,快速開發~

    Android開發使一開啟activity等介面Edittext獲取焦點,彈出軟鍵盤java程式碼實現

    // 獲取編輯框焦點 editText.setFocusable(true); //開啟軟鍵盤 IInputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVI

    manjaro狀態列顯示實時cpu記憶體等資訊

    開源專案indicator-sysmonitor地址:https://github.com/fossfreedom/indicator-sysmonitor 1,開啟manjaro自帶的軟體商店:        搜尋

    java使用 網路連線+RandomAccessFile + io 多執行緒實現多執行緒下載檔案並顯示實時

    下載檔案的時候,一個大檔案切成很多片,用多執行緒下載,速度會快很多 閱讀程式碼的時候注意檢視程式碼裡面的註釋 想用多執行緒下載檔案,則, 第一:得了解  RandomAccessFile  類,這是個隨機訪問檔案類,裡面可以設定 訪問的 開始地址和結束地址,且該類可讀可

    基於libpcap的測量實時(gopacket實踐)

    簡介 gopacket是經過cgo封裝的libpcap的介面,這樣便於我們在go語言中使用libpcap。 前提 libpcap是Linux平臺的抓包框架,它也有Windows移植版,比如winpcap,但在2013年已停止維護。所以本文采用的是winpcap官

    opwnert顯示實時

    新建一個shell指令碼 vim wa.sh 按下i之後輸入 #!/bin/sh #iptables -F #iptables -X UPLOAD #iptables -X DOWNLOAD stopflag=0 delr(){

    Win10如何顯示實時

    win10要想顯示實時網速,需要一個小外掛,但是如果要看網速就有很多方法了。下面介紹一下怎麼在工作列顯示實時網速,供大家參考。 下載win10可用的外掛,下載地址:https://pan.baidu.com/s/1o796puy,本版本是中文漢化版本,親測放心使用! 下載完成解壓到不常用的任意資料夾,注意

    linux測試上下行最大網實時

    1.安裝speedtest-cli測試最大上下行網速   speedtest-cli是一個用Python編寫的輕量級Linux命令列工具,在Python2.4至3.4版本下均可執行。它基於 Speedtest.net的基礎架構來測量網路的上/下行速率。安裝sp

    proc/net/dev實時統計實例【轉】

    特殊 總結 能夠 double 統計 pen ear 原創 關心 轉自:https://blog.csdn.net/dosthing/article/details/80384541 前言 網絡編程是程序連接網絡拓展的基礎,尤其是在物聯網、互聯網加等概念火熱的當下,

    Android開發仿手機衛士懸浮效果

    wrap 使用 indexof handle post ani refresh stat gen 基本的實現原理,這種桌面懸浮窗的效果很類似與Widget,但是它比Widget要靈活的多。主要是通過WindowManager這個類來實現的,調用這個類的addView方法用於

    Android進階2PopupWindow彈(有點懸浮的感覺)

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    Android 使用 WindowManager 實現懸浮監控 cpu 溫度

    前文概要 連續四篇介紹了車載設定,主要都是和原始碼相關,還未看過的,可以參考借鑑學習一下原始碼知識。車載設定–按鍵提示音 本文開始進入下一個篇章,主要是和 camera 相關,例如倒車,TV ,360 全景等,其主要實現原理是基於 WindowManager

    Android獲取動態懸浮許可權

    需要兩步: 一、在清單配置檔案中宣告許可權: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 二、程式碼申請許可權: private static fina

    道路交通實時流量監控預測系統

    中小型 組合 實時分析 xadmin spark2 初中 elf ejs 高可用架構 詳情請交流 QQ 709639943 00、道路交通實時流量監控預測系統 00、基於Spark2.x新聞網大數據實時分析可視化系統 00、小碼哥Java大神班五期 任小龍SSM