一、需求描叙
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>
四、结果图