Skip to content

Commit 12d6ba1

Browse files
author
yutianzuo
committed
add more auto p2p wifi
1 parent 60ef278 commit 12d6ba1

File tree

4 files changed

+294
-0
lines changed

4 files changed

+294
-0
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
<activity android:name=".SendFileActivity"/>
3333
<activity android:name=".RecvActivity"/>
3434
<activity android:name=".WifiP2pActivity"/>
35+
<activity android:name=".WifiP2pDynamicOwnerActivity"/>
3536
</application>
3637

3738
</manifest>

app/src/main/java/com/github/yutianzuo/myapplication/MainActivity.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,20 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
1111

1212
Button mButtonDns;
1313
Button mButtonNetChoose;
14+
Button mButtonP2p;
1415

1516
@Override
1617
protected void onCreate(Bundle savedInstanceState) {
1718
super.onCreate(savedInstanceState);
1819
setContentView(R.layout.activity_main);
1920
mButtonDns = findViewById(R.id.btn_dns);
2021
mButtonNetChoose = findViewById(R.id.btn_netchoose);
22+
mButtonP2p = findViewById(R.id.btn_p2p);
2123

2224

2325
mButtonDns.setOnClickListener(this);
2426
mButtonNetChoose.setOnClickListener(this);
27+
mButtonP2p.setOnClickListener(this);
2528

2629
}
2730

@@ -34,9 +37,17 @@ public void onClick(View v) {
3437
case R.id.btn_netchoose:
3538
chooseNet();
3639
break;
40+
case R.id.btn_p2p:
41+
P2P();
42+
break;
3743
}
3844
}
3945

46+
private void P2P() {
47+
Intent intent = new Intent(MainActivity.this, WifiP2pDynamicOwnerActivity.class);
48+
this.startActivity(intent);
49+
}
50+
4051
private void dns() {
4152
Intent intent = new Intent(MainActivity.this, DnsActivity.class);
4253
this.startActivity(intent);
Lines changed: 274 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,274 @@
1+
package com.github.yutianzuo.myapplication;
2+
3+
import android.content.Context;
4+
import android.content.Intent;
5+
import android.content.IntentFilter;
6+
import android.net.wifi.p2p.WifiP2pConfig;
7+
import android.net.wifi.p2p.WifiP2pDevice;
8+
import android.net.wifi.p2p.WifiP2pInfo;
9+
import android.net.wifi.p2p.WifiP2pManager;
10+
import android.net.wifi.p2p.WifiP2pManager.ActionListener;
11+
import android.os.Bundle;
12+
import android.support.annotation.Nullable;
13+
import android.support.v7.app.AppCompatActivity;
14+
import android.util.Log;
15+
import android.view.View;
16+
import android.view.View.OnClickListener;
17+
import android.widget.AdapterView;
18+
import android.widget.AdapterView.OnItemClickListener;
19+
import android.widget.ArrayAdapter;
20+
import android.widget.Button;
21+
import android.widget.ListView;
22+
import android.widget.Toast;
23+
24+
import java.util.ArrayList;
25+
import java.util.Collection;
26+
27+
public class WifiP2pDynamicOwnerActivity extends AppCompatActivity implements WifiP2pActionListener {
28+
private final static String TAG = "wifi-p2p";
29+
30+
31+
public WifiP2pManager mWifiP2pManager;
32+
public WifiP2pManager.Channel mChannel;
33+
private final IntentFilter intentFilter = new IntentFilter();
34+
private WifiP2pReceiver recv;
35+
private BaseDialog mLoadingDialog;
36+
37+
private Button mButtonSearch;
38+
private ListView mListView;
39+
40+
private ArrayList<String> mListDeviceName = new ArrayList();
41+
private ArrayList<WifiP2pDevice> mListDevices = new ArrayList();
42+
ArrayAdapter<String> adapter;
43+
String hostIp;
44+
45+
46+
@Override
47+
protected void onCreate(@Nullable Bundle savedInstanceState) {
48+
super.onCreate(savedInstanceState);
49+
50+
51+
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, mListDeviceName);
52+
setContentView(R.layout.p2p_activity);
53+
mListView = findViewById(R.id.lv_device);
54+
mListView.setAdapter(adapter);
55+
mListView.setOnItemClickListener(new OnItemClickListener() {
56+
@Override
57+
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
58+
WifiP2pDevice device = mListDevices.get(position);
59+
connect(device);
60+
}
61+
});
62+
63+
mButtonSearch = findViewById(R.id.btn_search);
64+
mButtonSearch.setOnClickListener(new OnClickListener() {
65+
@Override
66+
public void onClick(View v) {
67+
searchDevices();
68+
showWaitingDlg();
69+
}
70+
});
71+
72+
mWifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
73+
mChannel = mWifiP2pManager.initialize(this, getMainLooper(), this);
74+
75+
// Indicates a change in the Wi-Fi P2P status.
76+
intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
77+
78+
// Indicates a change in the list of available peers.
79+
intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
80+
81+
// Indicates the state of Wi-Fi P2P connectivity has changed.
82+
intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
83+
84+
// Indicates this device's details have changed.
85+
intentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
86+
87+
recv = new WifiP2pReceiver(mWifiP2pManager, mChannel, this);
88+
89+
}
90+
91+
@Override
92+
protected void onResume() {
93+
super.onResume();
94+
registerReceiver(recv, intentFilter);
95+
}
96+
97+
@Override
98+
protected void onPause() {
99+
super.onPause();
100+
unregisterReceiver(recv);
101+
}
102+
103+
@Override
104+
protected void onDestroy() {
105+
super.onDestroy();
106+
quitGroup();
107+
}
108+
109+
private void showWaitingDlg() {
110+
if (mLoadingDialog == null) {
111+
mLoadingDialog = BaseDialog.newBuilder(this).
112+
layout(R.layout.loading_layout).
113+
build();
114+
}
115+
mLoadingDialog.show();
116+
}
117+
118+
private void searchDevices() {
119+
mWifiP2pManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
120+
@Override
121+
public void onSuccess() {
122+
// WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION 广播,此时就可以调用 requestPeers 方法获取设备列表信息
123+
Log.e("wifi-p2p", "搜索设备成功");
124+
}
125+
126+
@Override
127+
public void onFailure(int reasonCode) {
128+
Log.e("wifi-p2p", "搜索设备失败");
129+
}
130+
});
131+
}
132+
133+
private void stopSearchingDevices() {
134+
mWifiP2pManager.stopPeerDiscovery(mChannel, new ActionListener() {
135+
@Override
136+
public void onSuccess() {
137+
Toast.makeText(WifiP2pDynamicOwnerActivity.this, "停止搜索设备ok", Toast.LENGTH_SHORT).show();
138+
}
139+
140+
@Override
141+
public void onFailure(int reason) {
142+
Toast.makeText(WifiP2pDynamicOwnerActivity.this, "停止搜索设备failed", Toast.LENGTH_SHORT).show();
143+
}
144+
});
145+
}
146+
147+
private void connect(final WifiP2pDevice device) {
148+
WifiP2pConfig config = new WifiP2pConfig();
149+
if (device != null) {
150+
config.deviceAddress = device.deviceAddress;
151+
mWifiP2pManager.connect(mChannel, config, new WifiP2pManager.ActionListener() {
152+
@Override
153+
public void onSuccess() {
154+
Toast.makeText(WifiP2pDynamicOwnerActivity.this, "connect调用成功", Toast.LENGTH_SHORT).show();
155+
}
156+
157+
@Override
158+
public void onFailure(int reason) {
159+
Toast.makeText(WifiP2pDynamicOwnerActivity.this, "connect调用失败" + reason,
160+
Toast.LENGTH_SHORT).show();
161+
}
162+
});
163+
}
164+
}
165+
166+
private void quitGroup() {
167+
mWifiP2pManager.removeGroup(mChannel, new WifiP2pManager.ActionListener() {
168+
@Override
169+
public void onSuccess() {
170+
Log.e("wifi-p2p", "移除组群成功");
171+
Toast.makeText(WifiP2pDynamicOwnerActivity.this, "移除组群成功", Toast.LENGTH_SHORT).show();
172+
}
173+
174+
@Override
175+
public void onFailure(int reason) {
176+
Log.e("wifi-p2p", "移除组群失败");
177+
Toast.makeText(WifiP2pDynamicOwnerActivity.this, "移除组群失败,请创建组群重试", Toast.LENGTH_SHORT).show();
178+
}
179+
});
180+
}
181+
182+
private void sendFile() {
183+
Intent intent = new Intent(WifiP2pDynamicOwnerActivity.this, SendFileActivity.class);
184+
intent.putExtra(SendFileActivity.IP_ADDR, hostIp);
185+
this.startActivityForResult(intent, 998);
186+
}
187+
188+
private void recvFile() {
189+
Intent intent = new Intent(this, RecvActivity.class);
190+
this.startActivityForResult(intent, 998);
191+
}
192+
193+
@Override
194+
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
195+
super.onActivityResult(requestCode, resultCode, data);
196+
if (requestCode == 998) {
197+
finish();
198+
}
199+
}
200+
201+
private void showSendRecvAfterConnectOK() {
202+
BaseDialog.newBuilder(this).setText(BaseDialog.MESSAGE_VIEW, "组间p2p网络成功后选择收发文件").
203+
setText(BaseDialog.LEFT_VIEW, "接收文件", new OnClickListener() {
204+
@Override
205+
public void onClick(View v) {
206+
recvFile();
207+
}
208+
}).
209+
setText(BaseDialog.RIGHT_VIEW, "发送文件", new OnClickListener() {
210+
@Override
211+
public void onClick(View v) {
212+
sendFile();
213+
}
214+
}).
215+
widthPercent(0.9f).
216+
show();
217+
}
218+
/////////////////////////////////////////////////////////////////////////////////////////////////
219+
220+
@Override
221+
public void wifiP2pEnabled(boolean enabled) {
222+
Log.e(TAG, "wifi is " + (enabled ? "on" : "off"));
223+
}
224+
225+
@Override
226+
public void onConnection(WifiP2pInfo wifiP2pInfo) {
227+
Log.e(TAG, "请求连接已成功:" + wifiP2pInfo.toString());
228+
hostIp = wifiP2pInfo.groupOwnerAddress.getHostAddress();
229+
// if (wifiP2pInfo.isGroupOwner) {
230+
// recvFile();
231+
// } else {
232+
// sendFile();
233+
// }
234+
showSendRecvAfterConnectOK();
235+
}
236+
237+
@Override
238+
public void onDisconnection() {
239+
Log.e(TAG, "onDisconnection");
240+
}
241+
242+
@Override
243+
public void onDeviceInfo(WifiP2pDevice wifiP2pDevice) {
244+
Log.e(TAG, "设备" + wifiP2pDevice.deviceName + " 信息发生改变:" + wifiP2pDevice.toString());
245+
}
246+
247+
@Override
248+
public void onPeersInfo(Collection<WifiP2pDevice> wifiP2pDeviceList) {
249+
Log.e(TAG, "周围设备列表发生变化");
250+
Log.e(TAG, "devices:");
251+
252+
for (WifiP2pDevice device : wifiP2pDeviceList) {
253+
Log.e(TAG, "--" + device.toString());
254+
if (!mListDeviceName.contains(device.deviceName)) {
255+
mListDeviceName.add(device.deviceName);
256+
mListDevices.add(device);
257+
}
258+
}
259+
260+
if (wifiP2pDeviceList.size() > 0) {
261+
try {
262+
mLoadingDialog.dismiss();
263+
} catch (Throwable e) {
264+
265+
}
266+
adapter.notifyDataSetChanged();
267+
}
268+
}
269+
270+
@Override
271+
public void onChannelDisconnected() {
272+
Log.e(TAG, "onChannelDisconnected");
273+
}
274+
}

app/src/main/res/layout/activity_main.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,12 @@
2020
android:layout_marginTop="20dp"
2121
android:text="Android-Drop"/>
2222

23+
<Button
24+
android:id="@+id/btn_p2p"
25+
android:layout_width="match_parent"
26+
android:layout_height="60dp"
27+
android:layout_below="@+id/btn_netchoose"
28+
android:layout_marginTop="20dp"
29+
android:text="平等P2P组网"/>
30+
2331
</RelativeLayout>

0 commit comments

Comments
 (0)