android p2p源码,Android P2P网络 传输文件

public static final String TAG = "wifidirectdemo";

private WifiP2pManager manager;

private boolean isWifiP2pEnabled = false;

private boolean retryChannel = false;

private final IntentFilter intentFilter = new IntentFilter();

private Channel channel;

private BroadcastReceiver receiver = null;

/**

* @param isWifiP2pEnabled

*            the isWifiP2pEnabled to set

*/

public void setIsWifiP2pEnabled(boolean isWifiP2pEnabled)

{

this.isWifiP2pEnabled = isWifiP2pEnabled;

}

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// add necessary intent values to be matched.

intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);

intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);

intentFilter

.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);

intentFilter

.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);

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

channel = manager.initialize(this, getMainLooper(), null);

}

/** register the BroadcastReceiver with the intent values to be matched */

@Override

public void onResume()

{

super.onResume();

receiver = new WiFiDirectBroadcastReceiver(manager, channel, this);

registerReceiver(receiver, intentFilter);

}

@Override

public void onPause()

{

super.onPause();

unregisterReceiver(receiver);

}

/**

* Remove all peers and clear all fields. This is called on

* BroadcastReceiver receiving a state change event.

*/

public void resetData()

{

DeviceListFragment fragmentList = (DeviceListFragment) getFragmentManager()

.findFragmentById(R.id.frag_list);

DeviceDetailFragment fragmentDetails = (DeviceDetailFragment) getFragmentManager()

.findFragmentById(R.id.frag_detail);

if (fragmentList != null)

{

fragmentList.clearPeers();

}

if (fragmentDetails != null)

{

fragmentDetails.resetViews();

}

}

@Override

public boolean onCreateOptionsMenu(Menu menu)

{

MenuInflater inflater = getMenuInflater();

inflater.inflate(R.menu.action_items, menu);

return true;

}

/*

* (non-Javadoc)

*

* @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)

*/

@Override

public boolean onOptionsItemSelected(MenuItem item)

{

switch (item.getItemId())

{

case R.id.atn_direct_enable:

if (manager != null && channel != null)

{

// Since this is the system wireless settings activity, it's

// not going to send us a result. We will be notified by

// WiFiDeviceBroadcastReceiver instead.

startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));

} else

{

Log.e(TAG, "channel or manager is null");

}

return true;

case R.id.atn_direct_discover:

if (!isWifiP2pEnabled)

{

Toast.makeText(WiFiDirectActivity.this,

R.string.p2p_off_warning, Toast.LENGTH_SHORT).show();

return true;

}

final DeviceListFragment fragment = (DeviceListFragment) getFragmentManager()

.findFragmentById(R.id.frag_list);

fragment.onInitiateDiscovery();

manager.discoverPeers(channel, new WifiP2pManager.ActionListener()

{

@Override

public void onSuccess()

{

Toast.makeText(WiFiDirectActivity.this,

"Discovery Initiated", Toast.LENGTH_SHORT).show();

}

@Override

public void onFailure(int reasonCode)

{

Toast.makeText(WiFiDirectActivity.this,

"Discovery Failed : " reasonCode,

Toast.LENGTH_SHORT).show();

}

});

return true;

default:

return super.onOptionsItemSelected(item);

}

}

@Override

public void showDetails(WifiP2pDevice device)

{

DeviceDetailFragment fragment = (DeviceDetailFragment) getFragmentManager()

.findFragmentById(R.id.frag_detail);

fragment.showDetails(device);

}

@Override

public void connect(WifiP2pConfig config)

{

manager.connect(channel, config, new ActionListener()

{

@Override

public void onSuccess()

{

// WiFiDirectBroadcastReceiver will notify us. Ignore for now.

}

@Override

public void onFailure(int reason)

{

Toast.makeText(WiFiDirectActivity.this,

"Connect failed. Retry.", Toast.LENGTH_SHORT).show();

}

});

}

@Override

public void disconnect()

{

final DeviceDetailFragment fragment = (DeviceDetailFragment) getFragmentManager()

.findFragmentById(R.id.frag_detail);

fragment.resetViews();

manager.removeGroup(channel, new ActionListener()

{

@Override

public void onFailure(int reasonCode)

{

Log.d(TAG, "Disconnect failed. Reason :" reasonCode);

}

@Override

public void onSuccess()

{

fragment.getView().setVisibility(View.GONE);

}

});

}

@Override

public void onChannelDisconnected()

{

// we will try once more

if (manager != null && !retryChannel)

{

Toast.makeText(this, "Channel lost. Trying again",

Toast.LENGTH_LONG).show();

resetData();

retryChannel = true;

manager.initialize(this, getMainLooper(), this);

} else

{

Toast.makeText(

this,

"Severe! Channel is probably lost premanently. Try Disable/Re-Enable P2P.",

Toast.LENGTH_LONG).show();

}

}

@Override

public void cancelDisconnect()

{

/*

* A cancel abort request by user. Disconnect i.e. removeGroup if

* already connected. Else, request WifiP2pManager to abort the ongoing

* request

*/

if (manager != null)

{

final DeviceListFragment fragment = (DeviceListFragment) getFragmentManager()

.findFragmentById(R.id.frag_list);

if (fragment.getDevice() == null

|| fragment.getDevice().status == WifiP2pDevice.CONNECTED)

{

disconnect();

} else if (fragment.getDevice().status == WifiP2pDevice.AVAILABLE

|| fragment.getDevice().status == WifiP2pDevice.INVITED)

{

manager.cancelConnect(channel, new ActionListener()

{

@Override

public void onSuccess()

{

Toast.makeText(WiFiDirectActivity.this,

"Aborting connection", Toast.LENGTH_SHORT)

.show();

}

@Override

public void onFailure(int reasonCode)

{

Toast.makeText(

WiFiDirectActivity.this,

"Connect abort request failed. Reason Code: "

reasonCode, Toast.LENGTH_SHORT)

.show();

}

});

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值