wi-fi java_java – 如何解决通过Wi-Fi(android API)发现其...

最近我按照Developer.Android.Com给出的步骤

但似乎我在那里有一些运气.

我试图发现附近可用的同伴,

把他们放进arraylist但似乎没有运气.我没有得到任何东西.

我的实际2设备实际上是android 4.1和4.2

由于Wifi Direct基于API Level 14,因此它是android 4.0

我认为我的真实设备不是问题.

我使用的概念是

使用1个活动和1个BroadCast接收器.

请看看我的代码,我说错了还是我忘了?

Chat1Activity.java

package com.example.androtut;

import java.util.ArrayList;

import others.MyBroadcastReceiver;

import android.app.Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.IntentFilter;

import android.net.wifi.p2p.WifiP2pDeviceList;

import android.net.wifi.p2p.WifiP2pManager;

import android.net.wifi.p2p.WifiP2pManager.Channel;

import android.net.wifi.p2p.WifiP2pManager.PeerListListener;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

public class Chat1Activity extends Activity {

private final IntentFilter mintentFilter = new IntentFilter();

private Channel mChannel;

private WifiP2pManager mManager;

private BroadcastReceiver mReceiver;

private ArrayList peers = new ArrayList();

private PeerListListener myPeerListListener = new PeerListListener() {

@Override

public void onPeersAvailable(WifiP2pDeviceList peerList) {

// Out with the old, in with the new.

peers.clear();

peers.addAll(peerList.getDeviceList());

// If an AdapterView is backed by this data, notify it

// of the change. For instance, if you have a ListView of available

// peers, trigger an update.

if (peers.size() == 0) {

Toast.makeText(getApplicationContext(),"Nothing found!", Toast.LENGTH_LONG).show();

return;

} else {

Toast.makeText(getApplicationContext(),"We've found " + peers.size() + " users", Toast.LENGTH_LONG).show();

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_chat1);

//Toast.makeText(getApplicationContext(), "Wifi is okay", Toast.LENGTH_LONG).show();

prepareIntentFilter();

Button btn_startchat = (Button) findViewById(R.id.btn_startchat);

// Listening to News Feed button click

btn_startchat.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

// Launching News Feed Screen

detectPeers();

}

});

mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);

mChannel = mManager.initialize(this, getMainLooper(), null);

}

private void detectPeers(){

mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {

@Override

public void onSuccess() {

// Code for when the discovery initiation is successful goes here.

// No services have actually been discovered yet, so this method

// can often be left blank. Code for peer discovery goes in the

// onReceive method, detailed below.

}

@Override

public void onFailure(int reasonCode) {

// Code for when the discovery initiation fails goes here.

// Alert the user that something went wrong.

}

});

}

@Override

protected void onResume() {

super.onResume();

mReceiver = new MyBroadcastReceiver(mManager, mChannel, this, myPeerListListener);

registerReceiver(mReceiver, mintentFilter);

}

/* unregister the broadcast receiver */

@Override

protected void onPause() {

super.onPause();

unregisterReceiver(mReceiver);

}

private void prepareIntentFilter() {

mintentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);

// Indicates a change in the list of available peers.

mintentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);

// Indicates the state of Wi-Fi P2P connectivity has changed.

mintentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);

// Indicates this device's details have changed.

mintentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);

}

}

和MyBroadcastReceiver.java

package others;

import java.util.ArrayList;

import com.example.androtut.Chat1Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.net.wifi.p2p.WifiP2pDevice;

import android.net.wifi.p2p.WifiP2pDeviceList;

import android.net.wifi.p2p.WifiP2pManager;

import android.net.wifi.p2p.WifiP2pManager.Channel;

import android.net.wifi.p2p.WifiP2pManager.PeerListListener;

import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver {

private WifiP2pManager mManager;

private Channel mChannel;

private Chat1Activity mActivity;

private PeerListListener myPeerListListener;

public MyBroadcastReceiver(WifiP2pManager manager, Channel channel,

Chat1Activity activity, PeerListListener obPeerList) {

super();

this.mManager = manager;

this.mChannel = channel;

this.mActivity = activity;

this.myPeerListListener = obPeerList;

}

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {

// Check to see if Wi-Fi is enabled and notify appropriate activity

} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {

// Call WifiP2pManager.requestPeers() to get a list of current peers

if (mManager != null) {

mManager.requestPeers(mChannel, myPeerListListener);

}

} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION

.equals(action)) {

// Respond to new connection or disconnections

} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION

.equals(action)) {

// Respond to this device's wifi state changing

}

if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {

int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);

if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {

// Wifi P2P is enabled

Toast.makeText(mActivity.getApplicationContext(),"Wifi is okay", Toast.LENGTH_LONG).show();

} else {

// Wi-Fi P2P is not enabled

Toast.makeText(mActivity.getApplicationContext(),

"Wifi is not okay", Toast.LENGTH_LONG).show();

}

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值