Android - when I click on REFRESH button it always goes to onFailure

60 views Asked by At

I'm trying to create a Mancala game. I'm doing a Wifi-Direct, but everytime I'm clicking on REFRESH button, it goes to onFailure method. The purpose of the refresh button is to discover new devices near me, but unrotuantely I can't find any devices because it's going to onFailure method.

What can I do?

public class wifiLoginScreen extends AppCompatActivity {

    private WifiP2pManager mWifiP2pManager;
    private WifiP2pManager.Channel mWifiP2pChannel;
    private BroadcastReceiver mReceiver;
    private boolean mWifiDirectEnabled;
    private List<String> mPeersList = new ArrayList<>();
    private ArrayAdapter<String> mPeersAdapter;

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

        // Initialize WifiP2pManager and WifiP2pManager.Channel objects
        mWifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
        mWifiP2pChannel = mWifiP2pManager.initialize(this, getMainLooper(), null);

        // Initialize the BroadcastReceiver to listen for Wi-Fi Direct events
        mReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();

                if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
                    // Wi-Fi Direct state has changed
                    int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
                    mWifiDirectEnabled = (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED);
                } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
                    // The list of available peers has changed
                    mWifiP2pManager.requestPeers(mWifiP2pChannel, new WifiP2pManager.PeerListListener() {
                        @Override
                        public void onPeersAvailable(WifiP2pDeviceList peers) {
                            // Filter the list of available peers to only show the ones that have the same Wi-Fi network name as the device
                            String ssid = getCurrentSsid(wifiLoginScreen.this);
                            mPeersList.clear();
                            for (WifiP2pDevice device : peers.getDeviceList()) {
                                if (device.deviceName.contains(ssid)) {
                                    mPeersList.add(device.deviceName);
                                }
                            }
                            mPeersAdapter.notifyDataSetChanged();
                        }
                    });
                }
            }
        };

        // Register the BroadcastReceiver to listen for Wi-Fi Direct events
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
        intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
        registerReceiver(mReceiver, intentFilter);

        // Initialize the list view to show the available peers
        ListView peersListView = findViewById(R.id.peersListView);
        mPeersAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mPeersList);
        peersListView.setAdapter(mPeersAdapter);
        // Initialize the "Refresh" button to trigger a new search for available peers
        Button refreshButton = findViewById(R.id.refreshButton);
        refreshButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mWifiDirectEnabled) {
                    mWifiP2pManager.discoverPeers(mWifiP2pChannel, new WifiP2pManager.ActionListener() {
                        @Override
                        public void onSuccess() {
                            // Discovery initiated successfully
                            Toast.makeText(wifiLoginScreen.this, "Searching for available devices...", Toast.LENGTH_SHORT).show();
                        }

                        @Override
                        public void onFailure(int reason) {
                            // Discovery failed to start
                            Toast.makeText(wifiLoginScreen.this, "Failed to start discovery", Toast.LENGTH_SHORT).show();
                        }
                    });
                } else {
                    Toast.makeText(wifiLoginScreen.this, "Wi-Fi Direct is not enabled", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

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

        // Register the BroadcastReceiver to listen for Wi-Fi Direct events
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
        intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
        registerReceiver(mReceiver, intentFilter);
    }

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

        // Unregister the BroadcastReceiver
        unregisterReceiver(mReceiver);
    }

    // Helper method to get the current Wi-Fi network name
    public static String getCurrentSsid(Context context) {
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        String ssid = wifiInfo.getSSID();
        if (ssid.startsWith("\"") && ssid.endsWith("\"")) {
            ssid = ssid.substring(1, ssid.length() - 1);
        }
        return ssid;
    }

}
0

There are 0 answers