如何解决如何通过 wifi-direct 发送应用程序的 recyclerview 列表
我一直在尝试开发一个应用程序,通过 wifi direct 将已安装的应用程序从一台设备发送到另一台设备。我已将应用程序列表检索到回收站视图中。我什至使用 wifip2pManager 找到并建立了与对等方的连接,但我不知道如何将这些选定的应用程序发送到我所连接的对等方。我是实施 Wifi Direct 的新手。我需要有关服务器和客户端代码的帮助以发送选定的应用。
SearchPeersActivity 的代码
public class SearchPeersActivity extends AppCompatActivity {
TextView textViewWifiOnOff;
Switch switchWifiOnOff;
Button btndiscover,btnSendItem;
ListView listView;
wifip2pManager mManager;
wifip2pManager.Channel mChannel;
broadcastReceiver mReceiver;
IntentFilter mIntentFilter;
List<wifip2pDevice> peers = new ArrayList<wifip2pDevice>();
String[] deviceNameArray;
wifip2pDevice[] deviceArray;
Socket socket;
ServerClass serverClass;
ClientClass clientClass;
boolean isHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_peers);
initialWork();
exqListner();
}
private void exqListner() {
switchWifiOnOff.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
startActivityForResult(intent,1);
}
});
btndiscover.setonClickListener(new View.OnClickListener() {
@SuppressLint("MissingPermission")
@Override
public void onClick(View v) {
mManager.discoverPeers(mChannel,new wifip2pManager.ActionListener() {
@Override
public void onSuccess() {
Toast.makeText(SearchPeersActivity.this,"discovery started!",Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int reason) {
Toast.makeText(SearchPeersActivity.this,"discovery Failed!",Toast.LENGTH_SHORT).show();
}
});
}
});
listView.setonItemClickListener(new AdapterView.OnItemClickListener() {
@SuppressLint("MissingPermission")
@Override
public void onItemClick(AdapterView<?> parent,View view,int i,long l) {
final wifip2pDevice device = deviceArray[i];
wifip2pConfig config = new wifip2pConfig();
config.deviceAddress = device.deviceAddress;
mManager.connect(mChannel,config,"Connected to " + device.deviceName,"Not Connected",Toast.LENGTH_SHORT).show();
}
});
}
});
btnSendItem.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<String> selectedApps = getIntent().getStringArrayListExtra("selectedApps");
}
});
}
private void initialWork(){
textViewWifiOnOff = findViewById(R.id.textView_wifiOnOff);
switchWifiOnOff = findViewById(R.id.switch_wifiOnOff);
btndiscover = findViewById(R.id.button_discover);
btnSendItem = findViewById(R.id.button_send_item);
listView = findViewById(R.id.listView_peers);
mManager = (wifip2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this,getMainLooper(),null);
mReceiver = new WiFiDirectbroadcastReceiver(mManager,mChannel,this);
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(wifip2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
mIntentFilter.addAction(wifip2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
mIntentFilter.addAction(wifip2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
}
wifip2pManager.PeerListListener peerListListener = new wifip2pManager.PeerListListener() {
@Override
public void onPeersAvailable(wifip2pDeviceList wifip2pDeviceList) {
if (!wifip2pDeviceList.equals(peers)){
peers.clear();
peers.addAll(wifip2pDeviceList.getDeviceList());
deviceNameArray = new String[wifip2pDeviceList.getDeviceList().size()];
deviceArray = new wifip2pDevice[wifip2pDeviceList.getDeviceList().size()];
int index = 0;
for (wifip2pDevice device : wifip2pDeviceList.getDeviceList()){
deviceNameArray[index] = device.deviceName;
deviceArray[index] = device;
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_list_item_1,deviceNameArray);
listView.setAdapter(adapter);
if (peers.size()==0) {
Toast.makeText(SearchPeersActivity.this,"No devices found!",Toast.LENGTH_SHORT).show();
return;
}
}
}
};
wifip2pManager.ConnectionInfoListener connectionInfoListener = new wifip2pManager.ConnectionInfoListener() {
@Override
public void onConnectionInfoAvailable(wifip2pInfo wifip2pInfo) {
final InetAddress groupOwnerAddress = wifip2pInfo.groupOwnerAddress;
if (wifip2pInfo.groupFormed && wifip2pInfo.isGroupOwner){
Toast.makeText(SearchPeersActivity.this,"Host",Toast.LENGTH_SHORT).show();
isHost = true;
serverClass = new ServerClass();
serverClass.start();
}
else if (wifip2pInfo.groupFormed){
Toast.makeText(SearchPeersActivity.this,"Client",Toast.LENGTH_SHORT).show();
isHost = false;
clientClass = new ClientClass(groupOwnerAddress);
clientClass.start();
}
}
};
@Override
protected void onResume() {
super.onResume();
registerReceiver(mReceiver,mIntentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mReceiver);
}
public class ServerClass extends Thread{
ServerSocket serverSocket;
private InputStream inputStream;
private OutputStream outputStream;
ShareFilesActivity 的代码
public class ShareFilesActivity extends AppCompatActivity implements ShareFilesListener {
List<ShareFilesModel> shareFilesModelList = new ArrayList<>();
RecyclerView recyclerView;
TextView textViewSend,textViewReceive;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_share_files);
recyclerView = findViewById(R.id.recyclerview_app_list);
textViewSend = findViewById(R.id.textview_send);
textViewReceive = findViewById(R.id.textview_receive);
////get apps
PackageManager pm = getApplicationContext().getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_Meta_DATA);
for (ApplicationInfo packageInfo : packages){
String name;
if ((name = String.valueOf(pm.getApplicationLabel(packageInfo))).isEmpty()){
name = packageInfo.packageName;
}
Drawable icon = pm.getApplicationIcon(packageInfo);
String apkPath = packageInfo.sourceDir;
long apkSize = new File(packageInfo.sourceDir).length();
shareFilesModelList.add(new ShareFilesModel(name,icon,apkPath,apkSize));
}
Collections.sort(shareFilesModelList,new Comparator<ShareFilesModel>() {
@Override
public int compare(ShareFilesModel o1,ShareFilesModel o2) {
return o1.getName().toLowerCase().compareto(o2.getName().toLowerCase());
}
});
linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(this);
recyclerView.setLayoutManager(linearlayoutmanager);
recyclerView.setHasFixedSize(true);
ShareFilesAdapter shareFilesAdapter = new ShareFilesAdapter(this,shareFilesModelList,this);
recyclerView.setAdapter(shareFilesAdapter);
textViewSend.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<ShareFilesModel> selectedApps = shareFilesAdapter.getSelectedApps();
Intent searchPeersIntent = new Intent(ShareFilesActivity.this,SearchPeersActivity.class);
searchPeersIntent.putExtra("selectedApps",(Serializable) selectedApps);
startActivity(searchPeersIntent);
}
});
}
@Override
public void onShareFilesAction(Boolean isSelected) {
if (isSelected){
Toast.makeText(this,"Success",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(this,"Fail",Toast.LENGTH_SHORT).show();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。