- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个应用程序,它使用 wifi-direct 创建最多 4 个设备的组(1 个主机 + 3 个对等设备)。我从 developer.android.com 阅读了 wifi-direct 的手册,找到了这个精彩的答案:https://stackoverflow.com/a/31641302/3106249 - 而且,我还有几个问题不知道如何处理。
第一个问题一步一步:
在主机设备上注册本地服务并创建组。
Map<String, String> record = new HashMap<String, String>();
record.put(TXTRECORD_PROP_AVAILABLE, "visible");
record.put(Core.SESSION_KEY, Core.SESSION_KEY_VALUE);
record.put(Core.SERVICE_INSTANCE_KEY, SERVICE_INSTANCE);
localService = WifiP2pDnsSdServiceInfo.newInstance(SERVICE_INSTANCE, Core.SERVICE_REG_TYPE, record);
manager.clearLocalServices(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(TAG, "clearLocalServices success");
manager.addLocalService(channel, localService, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(TAG, "addLocalService success");
manager.createGroup(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(TAG, "createGroup success");
}
@Override
public void onFailure(int reason) {
Log.d(TAG, "createGroup fail: " + reason);
}
});
}
@Override
public void onFailure(int reason) {
Log.d(TAG, "addLocalService fail: " + reason);
}
});
}
@Override
public void onFailure(int reason) {
Log.d(TAG, "clearLocalServices fail: " + reason);
}
});
以 10 秒的间隔发现主机设备所需的速度。
manager.removeServiceRequest(channel, serviceRequest, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(TAG, "discovering, removeServiceRequest success");
manager.stopPeerDiscovery(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(TAG, "discovering, stopPeerDiscovery success");
manager.discoverPeers(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(TAG, "discovering, discoverPeers success");
manager.addServiceRequest(channel, serviceRequest, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(TAG, "discovering, addServiceRequest success");
manager.discoverServices(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
//Log.d(TAG, "discoverServices success");
}
@Override
public void onFailure(int reason) {
Log.d(TAG, "discoverServices fail: " + reason);
}
});
}
@Override
public void onFailure(int reason) {
Log.d(TAG, "addServiceRequest fail: " + reason);
}
});
}
@Override
public void onFailure(int reason) {
Log.d(TAG, "discoverPeers fail: " + reason);
}
});
}
@Override
public void onFailure(int reason) {
Log.d(TAG, "stopPeerDiscovery fail: " + reason);
}
});
}
@Override
public void onFailure(int reason) {
Log.d(TAG, "clearServiceRequests fail: " + reason);
}
});
发送连接邀请(通过调用 WiFiP2pManager#connect()
)
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = device.deviceAddress;
config.wps.setup = WpsInfo.PBC;
manager.connect(channel, config, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(TAG, "manger.onSuccess with " + device.deviceName);
}
@Override
public void onFailure(int errorCode) {
Log.d(TAG, "Failed connecting to service " + errorCode);
}
});
WiFiP2pManager#connect()
时, 它在 ActionListenter 的
onFailure
中返回方法,错误代码为 2。然后,我调用
connect
5-10 秒后再次返回
onSuccess
方法。尽管如此,在连接的设备上没有出现连接提示对话框,这意味着我想没有收到连接邀请。
这两个问题是导致应用程序完全无法使用的主要问题。谁能向我解释我做错了什么或如何处理这些问题?
UPD
为小型发现 session 附加日志。
主机日志 (nexus 7):http://pastebin.com/ycfqRE4m
对等日志 (nexus 10):http://pastebin.com/5kbp6e7A
最佳答案
这是我对你第二个问题的解决方案我使用一个线程来发现并且不使用 Intent 接收器第三个问题,在连接完成之前不要使用 stopDiscovery
ConnectHelper.manager.discoverPeers(ConnectHelper.channel, null);
new WiFiDirectScanner().start();
private class WiFiDirectScanner extends Thread {
@Override
public void run() {
while (context != null) {
try {
ConnectHelper.manager.requestPeers(ConnectHelper.channel, peerList -> {
Collection<WifiP2pDevice> refreshedPeers = peerList.getDeviceList();
if (!refreshedPeers.equals(peers)) {
peers.clear();
peers.addAll(refreshedPeers);
scanSuccessWD();
}
});
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(3000);
} catch (InterruptedException ignored) {
}
}
}
}
关于Android WiFi-Direct : discovering, 连接问题。详细讨论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36161706/
在JSON输出中,“步骤”中有一个字段“maneuver”。在此“向左转”,“向右转”,“向左转轻微”等。示例为here 在哪里可以找到“操纵”字段的定义以及可能的值列表?没有相关描述here 提前致
默认情况下,我们如何从Google Direction API建议的替代 route 获得从A点到B点的最短距离路线?默认情况下,它会根据当前交通状况为我们提供最短持续时间的路线。我已经注意到,如果您
我想知道“precompile(r) directive”和“preprocessor directive”是一回事吗?我对前者不熟悉,但只是听说过,并通过这个Google在互联网上找到了一些关于它的
对于我的项目,我目前正在开发自定义表单/输入指令。 例如,我有以下指令: angular.module('myApp').directive("textField", function() {
我用谷歌搜索了一下,但找不到任何详细说明如何制作动态包装内容的 Angular 指令的内容(例如 http://demos.telerik.com/kendo-ui/panelbar/angular
我正在尝试在另一个指令中使用一个指令。具体来说,我有一个模态指令,我想传递一个表单指令,并将充当模态的主体。 我的模态指令: angular.module('Storyboard').dir
我构建了一个模块化形式的小型演示,其中包含单独的输入指令。它还可以预览绑定(bind)到相同 Controller 和范围的表单值。 导致问题的输入指令是嵌入到表单内的输入:
HTML 指令 .directive('authorname', function() { return { restrict: 'E', scope: {
我有可以编译的 Angular 指令 至和 至Hello World! 我怎样才能把greeting在我的 HTML 中标记并将其编译为 print-greeting然后最后显示Hello World
标题中引用的脚注是什么意思?这是 6.10.3p11 的脚注 If there are sequences of preprocessing tokens within the list of arg
因此,电话号码始终是 ltr(从左到右)。 在多语言网站上工作,我需要在方向为 rtl 的文本段落中插入一个电话号码(带有“+”前缀和由“-”分隔的数字)(当然是针对相关语言) 所以我有这样的东西:
我有一个标题元素,我想显示 flex 列,这样我就可以将 .container div 垂直居中。这工作正常。然后我需要 .container 中的元素在 1200px 之间以均匀的间距连续 flex
如何将整个ng-repeat对象传递给指令(或如何将指令的作用域设置为ng-repeat项)? 我是新来的有角度的人,很难解决这个问题。 我有一个 Controller ,可以很好地呈现以下内容:
我需要将“...”放在文本前面,并在填充 div 时仅显示文本的最后一部分。 正常时不执行任何操作 C:\fakepath\996571_1398802860346752_209456547
我需要将“...”放在文本的前面,并且只显示它的最后一部分,当它填充 div 时。 正常的时候什么也不做 C:\fakepath\996571_1398802860346752_209456
我需要一个“粘性”指令,当它位于页面顶部时向元素添加一个 css 类,并且还指示其状态的变化。出于这个原因,我定义了一个范围,如 { onStickyChange: '&' }。现在我想在 angul
我对 ngSwitch 指令有点困惑——它是“属性指令”还是“结构指令”。 属性指令用“方括号”编写,如 [ngStyle]、[ngClass] 等(我们将其写为 [ngSwitch],将其称为“属性
Wi-Fi direct 的 Wiki 规范声称“只有一个 Wi-Fi 设备需要兼容 Wi-Fi Direct 才能建立点对点连接,在彼此之间直接传输数据,大大减少了设置”。但是从 android A
我有一个响应式模板,我正尝试将其与我的 Angularjs 应用程序一起使用。这也是我的第一个 Angular 应用程序,所以我知道我在未来有很多错误和重构。 我已经阅读了足够多的关于 Angular
首先,我这样做的方式可能不正确。但我会解释这个问题: 1) 我正在创建名为 的指令 2) 当点击第一个指令中的按钮时,我试图在运行时动态插入第二个指令 如下: var app = angu
我是一名优秀的程序员,十分优秀!