Android WiFi直接返回不支持的对等网络

Android WiFi直接返回不支持的对等网络,android,p2p,wifi-direct,wifip2p,Android,P2p,Wifi Direct,Wifip2p,我有一个真正的安卓设备(安卓4.1.1)。支持Xender、ShareIt、Zapya等使用WiFi直接传输文件的应用程序 但当我运行我的应用程序时,它说P2P\u不受支持 我的清单权限是…… <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

我有一个真正的安卓设备(安卓4.1.1)。支持Xender、ShareIt、Zapya等使用WiFi直接传输文件的应用程序

但当我运行我的应用程序时,它说P2P\u不受支持

我的清单权限是……

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
    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);

    Receiver receiver=new Receiver();
    registerReceiver(receiver,intentFilter);

    WifiP2pManager manager=(WifiP2pManager)getSystemService(WIFI_P2P_SERVICE);
    channel=manager.initialize(this, Looper.getMainLooper(),null);

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

        @Override
        public void onSuccess() {
            // Code for when the discovery initiation is successful goes here.
            // No services have actually been discovered yet, so this method
            // can often be left blank.  Code for peer discovery goes in the
            // onReceive method, detailed below.
        }

        @Override
        public void onFailure(int reasonCode) {
            // Code for when the discovery initiation fails goes here.
            // Alert the user that something went wrong.
            switch (reasonCode){
                case WifiP2pManager.BUSY:Log.e("code","BUSY");break;
                case WifiP2pManager.ERROR:Log.e("code","ERROR");break;
                case WifiP2pManager.P2P_UNSUPPORTED:Log.e("code","P2P_UNSUPPORTED");break;

            }
        }
    });
code﹕ P2P_UNSUPPORTED
@Override
public void onReceive(Context context, Intent intent) {
    //Log.e("intent",intent.getAction());

    int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
    Log.e("raw state", ""+state);
    if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
        Log.e("state", "ON");
    } else if(state == WifiP2pManager.WIFI_P2P_STATE_DISABLED) {
        Log.e("state", "DISABLED "+ state);
    }
}
在日志中,我得到了。

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
    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);

    Receiver receiver=new Receiver();
    registerReceiver(receiver,intentFilter);

    WifiP2pManager manager=(WifiP2pManager)getSystemService(WIFI_P2P_SERVICE);
    channel=manager.initialize(this, Looper.getMainLooper(),null);

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

        @Override
        public void onSuccess() {
            // Code for when the discovery initiation is successful goes here.
            // No services have actually been discovered yet, so this method
            // can often be left blank.  Code for peer discovery goes in the
            // onReceive method, detailed below.
        }

        @Override
        public void onFailure(int reasonCode) {
            // Code for when the discovery initiation fails goes here.
            // Alert the user that something went wrong.
            switch (reasonCode){
                case WifiP2pManager.BUSY:Log.e("code","BUSY");break;
                case WifiP2pManager.ERROR:Log.e("code","ERROR");break;
                case WifiP2pManager.P2P_UNSUPPORTED:Log.e("code","P2P_UNSUPPORTED");break;

            }
        }
    });
code﹕ P2P_UNSUPPORTED
@Override
public void onReceive(Context context, Intent intent) {
    //Log.e("intent",intent.getAction());

    int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
    Log.e("raw state", ""+state);
    if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
        Log.e("state", "ON");
    } else if(state == WifiP2pManager.WIFI_P2P_STATE_DISABLED) {
        Log.e("state", "DISABLED "+ state);
    }
}
而我的BraodcastReceiver就是这样的..

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
    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);

    Receiver receiver=new Receiver();
    registerReceiver(receiver,intentFilter);

    WifiP2pManager manager=(WifiP2pManager)getSystemService(WIFI_P2P_SERVICE);
    channel=manager.initialize(this, Looper.getMainLooper(),null);

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

        @Override
        public void onSuccess() {
            // Code for when the discovery initiation is successful goes here.
            // No services have actually been discovered yet, so this method
            // can often be left blank.  Code for peer discovery goes in the
            // onReceive method, detailed below.
        }

        @Override
        public void onFailure(int reasonCode) {
            // Code for when the discovery initiation fails goes here.
            // Alert the user that something went wrong.
            switch (reasonCode){
                case WifiP2pManager.BUSY:Log.e("code","BUSY");break;
                case WifiP2pManager.ERROR:Log.e("code","ERROR");break;
                case WifiP2pManager.P2P_UNSUPPORTED:Log.e("code","P2P_UNSUPPORTED");break;

            }
        }
    });
code﹕ P2P_UNSUPPORTED
@Override
public void onReceive(Context context, Intent intent) {
    //Log.e("intent",intent.getAction());

    int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
    Log.e("raw state", ""+state);
    if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
        Log.e("state", "ON");
    } else if(state == WifiP2pManager.WIFI_P2P_STATE_DISABLED) {
        Log.e("state", "DISABLED "+ state);
    }
}
在那里我得到的日志是,,

raw state﹕ -1

注意:变量状态既不等于WifiP2pManager.WIFI\u P2P\u state\u ENABLED,也不等于WifiP2pManager.WIFI\u P2P\u state\u DISABLED

您列出的应用程序可能能够使用Wi-Fi Direct以外的其他传输方式。
P2P\u UNSUPPORTED
错误表示您的设备没有Wi-Fi Direct功能。您可以通过执行以下命令来尝试确认这一点:
getPackageManager().hasSystemFeature(PackageManager.FEATURE\u WIFI\u DIRECT)
。或者,如果您的设备具有Wi-Fi Direct,您可以从设备的Wi-Fi设置访问Wi-Fi Direct设置活动。

您列出的应用程序可能可以使用Wi-Fi Direct以外的其他传输方式。
P2P\u UNSUPPORTED
错误表示您的设备没有Wi-Fi Direct功能。您可以通过执行以下命令来尝试确认这一点:
getPackageManager().hasSystemFeature(PackageManager.FEATURE\u WIFI\u DIRECT)
。或者,如果您的设备具有Wi-Fi Direct,您可以从设备的Wi-Fi设置访问Wi-Fi Direct设置活动。

尝试运行Android的Wi-Fi Direct演示,看看P2P是否工作:这里还有一些其他Android Wi-Fi Direct资源:尝试运行Android的Wi-Fi Direct演示,看看P2P是否工作:这里还有一些其他Android Wi-Fi Direct资源: