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

我如何通过类似于 NetShare 的 WiFi P2P 网络将我的应用连接到其他设备,这些网络使用 WiFi 作为热点

如何解决我如何通过类似于 NetShare 的 WiFi P2P 网络将我的应用连接到其他设备,这些网络使用 WiFi 作为热点

这是我必须使用 WiFi P2P 将安卓设备连接到其他设备的应用程序。

我的目标是添加类似 netShare 应用程序的功能

https://play.google.com/store/apps/details?id=kha.prog.mikrotik&hl=en_IN&gl=US(应用链接

我在能够发现但无法正确连接的地方编写了此代码。我错过了什么吗?或者我做错了什么?基本上它应该与设备建立连接并相互共享数据。

这是我的主要活动 -

public class MainActivity extends AppCompatActivity {

TextView wifiStatusTextView;
Button wifiButton;
TextView discoveryStatusTextView;
Button discoverButton;
TextView connectionStatusTextView;
ListView listView;

int PERMISSION_ID = 44;

WifiManager wifiManager;
broadcastReceiver receiver;
IntentFilter filter;
wifip2pManager myManager;
wifip2pManager.Channel myChannel;

List<wifip2pDevice> peers = new ArrayList<wifip2pDevice>();
String[] deviceNameArray;
wifip2pDevice[] devices;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    wifiStatusTextView = (TextView) findViewById(R.id.wifiStatusTextView);
    discoveryStatusTextView = findViewById(R.id.discoveryStatusTextView);
    wifiButton = (Button) findViewById(R.id.wifiButton);
    discoverButton = findViewById(R.id.discoverButton);
    connectionStatusTextView = findViewById(R.id.connectionStatusTextView);

    listView = findViewById(R.id.peersListView);

    wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

    myManager = (wifip2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
    myChannel = myManager.initialize(this,getMainLooper(),null);

    receiver = new WifiDirectbroadcastReciever(myManager,myChannel,this);
    filter = new IntentFilter();
    filter.addAction(wifip2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
    filter.addAction(wifip2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
    filter.addAction(wifip2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
    filter.addAction(wifip2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);

    discover();

    listView.setonItemClickListener(new AdapterView.OnItemClickListener() {
        @SuppressLint("MissingPermission")
        @Override
        public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
            final wifip2pDevice device = devices[position];
            wifip2pConfig config = new wifip2pConfig();
            config.deviceAddress = device.deviceAddress;
            if (checkPermissions()) {
                myManager.connect(myChannel,config,new wifip2pManager.ActionListener() {
                    @Override
                    public void onSuccess() {
                        Toast.makeText(MainActivity.this,"Connected to " + device.deviceName,Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onFailure(int reason) {
                        Toast.makeText(MainActivity.this,"Connection Failed",Toast.LENGTH_SHORT).show();
                    }
                });
            } else {
                requestPermissions();
            }
        }
    });
}

wifip2pManager.PeerListListener peerListListener = new wifip2pManager.PeerListListener() {
    @Override
    public void onPeersAvailable(wifip2pDeviceList updatedPeers) {
        if (!updatedPeers.getDeviceList().equals(peers)) {
            peers.clear();
            peers.addAll(updatedPeers.getDeviceList());
            deviceNameArray = new String[updatedPeers.getDeviceList().size()];
            devices = new wifip2pDevice[updatedPeers.getDeviceList().size()];
            int index = 0;
            for (wifip2pDevice device : updatedPeers.getDeviceList()) {
                deviceNameArray[index] = device.deviceName;
                devices[index] = device;
                index++;
            }
            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,deviceNameArray);
            listView.setAdapter(arrayAdapter);
        }
        if (updatedPeers.getDeviceList().size() == 0) {
            Toast.makeText(MainActivity.this,"No device found",Toast.LENGTH_SHORT).show();
            return;
        }
    }
};
wifip2pManager.ConnectionInfoListener connectionInfoListener = new wifip2pManager.ConnectionInfoListener() {
    @Override
    public void onConnectionInfoAvailable(wifip2pInfo info) {
        final InetAddress groupOwnerAddress = info.groupOwnerAddress;
        if (info.groupFormed) {
            if (info.isGroupOwner) {
                connectionStatusTextView.setText("Host");
               
            } else {
                connectionStatusTextView.setText("Client");
                
            }
        }
    }
};

 @Override
protected void onResume() {
    super.onResume();

    registerReceiver(receiver,filter);
}

@Override
protected void onPause() {
    super.onPause();

    unregisterReceiver(receiver);
}

public void wifiToggle(View view) {
    if (wifiManager.isWifiEnabled()) {
        wifiManager.setWifiEnabled(false);
        wifiStatusTextView.setText("WiFi disabled");
        wifiButton.setText("On");
    } else {
        wifiManager.setWifiEnabled(true);
        wifiStatusTextView.setText("WiFi Enabled");
        wifiButton.setText("Off");
    }
}

@SuppressLint("MissingPermission")
void discover() {
    if (checkPermissions()) {
        myManager.discoverPeers(myChannel,new wifip2pManager.ActionListener() {
            @Override
            public void onSuccess() {
                discoveryStatusTextView.setText("discovery started");
            }

            @Override
            public void onFailure(int reason) {
                discoveryStatusTextView.setText("discovery Failed to start");
            }
        });
    } else {
        requestPermissions();
    }
}

这是我的广播接收器类

public class WifiDirectbroadcastReciever extends broadcastReceiver {

wifip2pManager p2pManager;
wifip2pManager.Channel p2pChannel;
MainActivity activity;

WifiDirectbroadcastReciever(wifip2pManager p2pManager,wifip2pManager.Channel p2pChannel,MainActivity activity) {
    this.p2pManager = p2pManager;
    this.p2pChannel = p2pChannel;
    this.activity = activity;
}

@SuppressLint("MissingPermission")
@Override
public void onReceive(Context context,Intent intent) {
    String action = intent.getAction();
    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) {
            Toast.makeText(context,"wifi is on",Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context,"wifi is off",Toast.LENGTH_SHORT).show();
        }
    } else if (wifip2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
        if (p2pManager != null) {
            p2pManager.requestPeers(p2pChannel,activity.peerListListener);
        }
    }
    else if (wifip2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)){
        if (p2pManager == null) {
            return;
        }
        NetworkInfo networkInfo = intent.getParcelableExtra(wifip2pManager.EXTRA_NETWORK_INFO);
        if (networkInfo.isConnected()) {
            p2pManager.requestConnectionInfo(p2pChannel,activity.connectionInfoListener);
        } else {
            activity.connectionStatusTextView.setText("Device disconnected");
        }

    }
    else if (wifip2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)){

    }
}
}

我已授予所有必要的权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

如何在应用中显示设备的当前显示名称,以便用户可以更改名称和密码,以便物联网设备可以使用该设备名称和密码进行连接。

netShare 中的这种无根网络共享功能如何提供使用 wifi 的热点,即使使用自定义 wifi 名称和密码?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。