循环的wifi发送

一、需求描叙

1.通过按测试app(安装在手机)上的start按钮,会将手机连接的内部局域网的:

ID号(手机连上wifi的名字;这个可通过相关的API去获取,然后显示在app的控件里面,发送出去的时候又要从控件中获取),

wifi密码(自己输入app控件内,发送出去的时候要自己通过相应的API从控件获取),

IP号(发送出去的时候通过相关的API去获取)这三个东西发送出去,而且是循环发送出去的。

2.发送出去的次数会有一个统计;

3.发送出去的三个东西在android平板那端可以写个接收的(这个不了解);


二、项目中涉及到的相关文件(公司的提供不了)


三、app的相关代码

1.Demo.java

package com.broadcom.cooeedemo;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.ToggleButton;
import android.view.View;
import android.view.Window;
import android.app.AlertDialog;
import android.content.DialogInterface;
import com.broadcom.cooee.*;

public class Demo extends Activity {
	static final String TAG = "demo";
	int mLocalIp;
	ToggleButton mBtn = null;
	Thread mThread = null;
	boolean mDone = false;
	private int num = 0;
	private int num1 = 0;
	private TextView textviewsucced;
	private TextView textviewIP;
	private WifiInfo info;
	private TextView textviewfailure;
	private String ip;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
       //1.更新wifi信息
		updateWifiInfo();
		
	//	textviewsucced = (TextView) findViewById(R.id.main_tv_succeed);
		mBtn = (ToggleButton) findViewById(R.id.send);
		textviewIP = (TextView) findViewById(R.id.main_tv_ip);
		textviewfailure = (TextView) findViewById(R.id.main_tv_failure);
		
		
		//2.发送按钮的监听
		mBtn.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				if (v.getId() == R.id.send) {
					if (!mDone) {
						mDone = true;
						//2.1 从EditText里面获取ssid(在1.2时已经将ssid的值设置进了EditText)
						final String ssid = ((EditText) findViewById(R.id.ssid))
								.getText().toString();
						//2.2从EditText里面获取密码(密码自己输入) 
						final String password = ((EditText) findViewById(R.id.password))
								.getText().toString();

						//2.3 /* set packet interval 设置包时间间隔 */
						Cooee.SetPacketInterval(20); /* 10ms */

						if (mThread == null) {
							mThread = new Thread() {// 开子线程发送
								public void run() {
									while (mDone) {
									
										
										//2.4通过包发送相应的值
										Cooee.send(
												((EditText) findViewById(R.id.ssid))
														.getText().toString(),
												((EditText) findViewById(R.id.password))
														.getText().toString(),
												mLocalIp);

										
										//2.5根据相应的返回值,统计发送的总的次数
										/**
										 * 这里返回值无任成功与否,都是返回0.
										 */
										int ret = 1;
										ret = Cooee.send(ssid, password,
												mLocalIp);

										System.out.println("-----------" + ret);
										boolean b = Boolean.valueOf("" + ret);
										// mLocalIp, "0123456789abcdef");
										if (b) {
											try {
												Message msg = new Message();// 创建信使(很形象的理解)
												msg.what = 1;// 给信使做标记
												Bundle bundle = new Bundle();// 创建放数据的容器

												bundle.putInt("num", num++);// 容器里面放入数据,键值对的形式放入。放入的值为String类型则用putString,为int类型则用putInt。

												msg.setData(bundle);// 将存放了数据的容器交给信使
												handler.sendMessage(msg); // handler传递参数

											} catch (Exception e) {
												e.printStackTrace();
												System.out
														.println("thread error...");
											}

										} else {
											try {
												// Thread.sleep(5* 1000); //
												// 睡眠5s
												Message msg = new Message();// 创建信使(很形象的理解)
												msg.what = 2;// 给信使做标记
												Bundle bundle = new Bundle();// 创建放数据的容器

												bundle.putInt("num1", num1++);// 容器里面放入数据,键值对的形式放入。放入的值为String类型则用putString,为int类型则用putInt。

												msg.setData(bundle);// 将存放了数据的容器交给信使
												handler.sendMessage(msg); // handler传递参数

											} catch (Exception e) {
												e.printStackTrace();
												System.out
														.println("thread error...");
											}
										}
									}
								}
							};
						}

						mThread.start();
						Toast.makeText(
								getApplicationContext(),
								"ID号:" + ssid + "   密码:<" + password + ">  IP:"
										+ ip, Toast.LENGTH_SHORT).show();
					} else {
						mDone = false;
						mThread = null;
						num1=0;
					}
				}
			}
		});
		
		//3.IP地址格式化并在控件上显示
		ip = intToIp(mLocalIp);
		textviewIP.setText("IP:" + ip);
	}

	@Override
	protected void onResume() { // 获取焦点
		super.onResume();
		updateWifiInfo();// 更新wifi信息
	}

	/**
	 * 1.更新wifi信息
	 */
	void updateWifiInfo() {
		ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo networkInfo = connManager
				.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
		Log.d(TAG, "connected: " + networkInfo.isConnected());

		// 1.1wifi没有连接上
		if (!networkInfo.isConnected()) {
			Log.d(TAG, getString(R.string.connect_wifi));
			showErrorDialog();// 1.1.1显示wifi没有连接上的对话框
			return;
		}

		
		//1.2wifi连接上
		// 1.2.1获取手机上wifi的mLocalIp(IP地址)和ssid(无线路由器的身份证,电脑通过这个ssid来识别是哪台路由器)
		WifiManager wifiManager = (WifiManager) this
				.getSystemService(Context.WIFI_SERVICE);
		info = wifiManager.getConnectionInfo();
		mLocalIp = info.getIpAddress();//获取手机上wifi的mLocalIp(IP地址)
		Log.d(TAG, String.format("ip: 0x%x", mLocalIp));

		EditText et = (EditText) findViewById(R.id.ssid);
		String ssid = info.getSSID();//获取手机上wifi的ssid
		if (ssid.startsWith("\"")) {
			ssid = ssid.substring(1, ssid.length() - 1); // 截取字符串
		}
		et.setText(ssid);// 将获取到的ssid显示到EditText
		Log.d(TAG, "ssid: " + ssid);
	}
	
	/**
	 * 1.1.1显示wifi没有连接上的对话框
	 */
	void showErrorDialog() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setMessage(R.string.connect_wifi);
		builder.setPositiveButton(android.R.string.ok,
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						finish();// 结束这个activity
					}
				});
		builder.create().show();
	}

	/**
	 * IP地址格式
	 * 
	 * @param i
	 * @return
	 */
	private String intToIp(int i) {
		return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF)
				+ "." + (i >> 24 & 0xFF);
	}

	

	/**
	 * handler类接收数据
	 */
	Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			if (msg.what == 1) {
				// 动态更新数据UI界面
				String str = msg.getData().getInt("num") + "";// 获取值时相应的类型要对应,传入为String类型用getString;Int类型用getInt。
				textviewsucced.setText("成功" + str + "次");// 将数据展示到TextView
			} else if (msg.what == 2) {
				// 动态更新数据UI界面
				String str = msg.getData().getInt("num1") + "";// 获取值时相应的类型要对应,传入为String类型用getString;Int类型用getInt。
				textviewfailure.setText("总计" + str + "次");// 将数据展示到TextView
			}
		};
	};
	
}

2.main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/bg"
    android:orientation="vertical" >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="@drawable/title_red_bg" >

        <TextView
            android:id="@+id/tab_tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="wifi发送"
            android:textColor="#ffffff"
            android:textSize="18sp" />

        <ImageView
            android:id="@+id/tab_iv_menu"
            android:layout_width="45dp"
            android:layout_height="45dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="8dp"
            android:src="@drawable/zhc" />
    </RelativeLayout>

    <EditText
        android:hint="ssid:"
        android:id="@+id/ssid"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:id="@+id/password"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="password:"
         />

    <!--
         <Button 
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:gravity="left"
        android:text="发送间隔5*1000ms"/>
    -->

    <ToggleButton
        android:id="@+id/send"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textOff="@string/btn_start"
        android:textOn="@string/btn_stop" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:orientation="horizontal">

     <!--    <TextView
            android:id="@+id/main_tv_succeed"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="成功_次"
            android:textColor="#ffffff" /> -->

        <TextView
            android:id="@+id/main_tv_failure"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="总计_次"
            android:textColor="#ffffff" />
    </LinearLayout>

    <TextView
        android:id="@+id/main_tv_ip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="IP:"
        android:textColor="#ffffff" />

</LinearLayout>

3.strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">智汇创</string>
    <string name="btn_start">Start</string>
    <string name="btn_stop">Stop</string>
    <string name="connect_wifi">Wi-Fi not connected, abort.</string>
</resources>

4.图片随便找几张替代就可

5.清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.broadcom.cooeedemo"
      android:versionCode="8"
      android:versionName="1.7.0">

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
    
    <application android:label="@string/app_name" >
        <activity android:name="Demo"
                  android:screenOrientation="portrait"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest> 

四、结果图



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值