使用server发送广播给activity实现网络延迟功能

今天做了一个网络延迟的demo,特意来记录下:


 先上效果图:


界面没有美化,只注重功能实现:







1.清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="nowspeed.tdotapp.myapplication">
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <!-- 访问网络. 某些位置信息需要从网络服务器获取 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <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>
        <service android:name=".Floatingwindow.FloatWindowService"/>
        <service android:name=".NetspeedService"/>

    </application>

</manifest>


2.Service:


package nowspeed.tdotapp.myapplication;

import android.app.Service;
import android.content.Intent;
import android.net.TrafficStats;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * @author:Jack Tony
 * @tips  :实时获取当前网速的service
 * @date  :2014-9-24
 */
public class NetspeedService extends Service {

    private long total_data = TrafficStats.getTotalRxBytes();
    private Handler mHandler;
    //几秒刷新一次
    private final int count = 3;

    /**
     * 定义线程周期性地获取网速
     */
    private Runnable mRunnable = new Runnable() {
        @Override
        public void run() {
            //定时器
            mHandler.postDelayed(mRunnable, count * 1000);
            Message msg = mHandler.obtainMessage();
            msg.what = 1;
//            msg.arg1 = getNetSpeed();
            msg.obj=Ping("www.baidu.com");
            mHandler.sendMessage(msg);
        }
    };
    private String speednow="";
    private String subresult;

    @Override
    public void onCreate() {
        super.onCreate();

        mHandler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (msg.what == 1) {
                    //float real_data = (float)msg.arg1;
//                    if (msg.arg1 > 1024) {
//                        speednow = msg.arg1 / 1024 + "kb/s";
//                    } else {
//                        speednow = msg.arg1 + "b/s";
//                    }
                    speednow=(String) msg.obj;
                    Log.e("wen","NetspeedService:"+speednow);
                }
            }
        };
    }

    /**
     * 核心方法,得到当前网速
     * @return
     */
    private int getNetSpeed() {
        long traffic_data = TrafficStats.getTotalRxBytes() - total_data;
        total_data = TrafficStats.getTotalRxBytes();
        return (int)traffic_data /count ;
    }
    public String Ping(String str) {
        String resault = "";
        Process p;
        try {
            //ping -c 3 -w 100  中  ,-c 是指ping的次数 3是指ping 3次 ,-w 100  以秒为单位指定超时间隔,是指超时时间为100秒
            p = Runtime.getRuntime().exec("ping -c 3 -w 100 " + str);
            int status = p.waitFor();

            InputStream input = p.getInputStream();
            BufferedReader in = new BufferedReader(new InputStreamReader(input));
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = in.readLine()) != null){
                buffer.append(line);
                Log.e("wen","line:"+line);

            }
            System.out.println("Return ============" + buffer.toString());

            if (status == 0) {
                resault = "success";
                String   strs = buffer.toString();
                String pattern = "time=.*?ms";

                // 创建 Pattern 对象
                Pattern r = Pattern.compile(pattern);
                // 现在创建 matcher 对象
                Matcher m = r.matcher(strs);
                if (m.find( )) {
                    resault = m.group();
                    Log.e("wen","resault:"+resault);
                    subresult = resault.substring(5,resault.length());
                    //发送广播
                    Intent intent=new Intent();
                    //设置Action
                    intent.setAction("aa");
                    //携带数据
                    intent.putExtra("time",subresult);
                    //发送广播
                    sendBroadcast(intent);
                    Toast.makeText(getApplicationContext(), "发送广播成功"+subresult, Toast.LENGTH_SHORT).show();
                }
            } else {
                resault = "faild";
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return resault;
    }
    /**
     * 启动服务时就开始启动线程获取网速
     */
    @Override
    public void onStart(Intent intent, int startId) {
        mHandler.postDelayed(mRunnable, 0);
    };

    /**
     * 在服务结束时删除消息队列
     */
    @Override
    public void onDestroy() {
        mHandler.removeCallbacks(mRunnable);
        super.onDestroy();

    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

}

3.Activity:


package nowspeed.tdotapp.myapplication;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {
    private TextView tvshow ,tvtime;
    private String time;

    Handler handler=new Handler();
    Runnable able=new Runnable() {
        @Override
        public void run() {
            tvtime.setText(time);
            handler.postDelayed(able,1000);
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        sp = getSharedPreferences("mytime",MODE_PRIVATE);

        tvshow= (TextView) findViewById(R.id.tvshow);
        tvtime= (TextView) findViewById(R.id.tvtime);

        tvshow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startService(new Intent(MainActivity.this,NetspeedService.class));
//                startService(new Intent(MainActivity.this, FloatWindowService.class));
//                finish();

                handler.postDelayed(able,1000);
               

            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        registerReceiver();
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(mReceiver);
    }

    //注册广播
    public void registerReceiver() {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("aa");
        registerReceiver(mReceiver, intentFilter);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
    //接收广播
    private BroadcastReceiver mReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if(action.equals("aa")){
                String stringExtra = intent.getStringExtra("time");
                tvtime.setText(stringExtra);
            }
        }
    };
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_26554909

有您的支持,我们将做的更好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值