使用server发送广播给activity实现网络延迟功能
来源:互联网 发布:反稀释 加权平均 知乎 编辑:程序博客网 时间:2024/06/04 19:42
今天做了一个网络延迟的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); } } };}
阅读全文
0 0
- 使用server发送广播给activity实现网络延迟功能
- Android中Service发送广播给activity
- 使用ApplicationContext启动activity,发送广播,显示Toast
- Activity向Fragment发送广播
- Java网络编程笔记--实现UDP广播发送与接收
- Java-使用JavaMail发送一封邮件给用户邮箱功能实现
- 安卓BroadcastReceiver组件使用系列2:给多个广播接收者发送广播和有序广播的使用
- 用AIDL 实现service 主动发送消息给activity
- 使用adb发送广播
- 不使用延迟实现数据帧间的发送
- 实现“延迟消息”功能
- 发送广播监听网络状态
- Activity和Fragment通信------发送广播Broadcast
- Android Activity接收Service发送的广播
- Android Activity接收Service发送的广播
- 两个activity之间发送本地广播
- 发送数据给其他activity
- Android_Listview中使用线程实现分页延迟加载的功能
- Android主要热修复原理分析
- 如何获得购物车选中的的checkBox的ID值
- Android Studio 好用的插件
- android:ellipsize的使用
- solr集群
- 使用server发送广播给activity实现网络延迟功能
- 理解用户模式和内核模式(译)
- Java封装
- Linux安装Tomcat服务器
- 使用gradle上传jar到maven本地仓库
- Mac 配置AAPT环境变量
- nginx反向代理服务器地址重写、负载均衡、证书认证、虚拟主机
- 解决(部分)VS2015未能正确加载Visual C++ Resource Editor Package 包
- 【Java面试】---基本运算与流程处理