微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过 wifi-direct 发送应用程序的 recyclerview 列表

如何解决如何通过 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 举报,一经查实,本站将立刻删除。