- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的代码可以工作,但突然不工作了。代码如下。
public class AndroidDnssdDiscoveryTestActivity extends Activity {
/** Called when the activity is first created. */
android.net.wifi.WifiManager.MulticastLock lock;
android.os.Handler handler = new android.os.Handler();
final Context context = this;
AlertDialog alert=null;
public void onCreate(Bundle savedInstanceState) {
/*
* StrictMode.ThreadPolicy was introduced since API Level 9 and the default thread policy had been changed since API Level 11,
* which in short, does not allow network operation (include HttpClient and HttpUrlConnection) get executed on UI thread.
* if you do this, you get NetworkOnMainThreadException. It needs to add the following 3 lines.
*/
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
handler.postDelayed(new Runnable() {
public void run() {
setUp();
}
}, 1000);
}
private String type = "_http._tcp.local.";
private JmDNS jmdns = null;
private String Servername ="test._http._tcp.local.";
private boolean _findSECE = false;
private ServiceListener listener = null;
private HttpClient httpclient = new DefaultHttpClient();
private ServiceInfo serviceInfo;
//private ServiceInfo serviceInfo;
private void setUp() {
android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) getSystemService(android.content.Context.WIFI_SERVICE);
lock = wifi.createMulticastLock("mylockthereturn");
lock.setReferenceCounted(true);
lock.acquire();
try {
jmdns = JmDNS.create();
notifyUser("create");
jmdns.addServiceListener(type, listener = new ServiceListener() {
public void serviceResolved(ServiceEvent ev) {
final String getName = ev.getInfo().getQualifiedName();
final String getUrl = ev.getInfo().getURLs()[0];
if(getName.equalsIgnoreCase(servername))
{
Log.d("getName",getName);
Log.d("getUrl",getUrl);
// show alert
((Activity) context).runOnUiThread(new Runnable() {
public void run() {
alertDialog(getName,getUrl);
}
});
}else{
notifyUser("Name: " + getName+"\nURL: " + getUrl);
Log.d("getName",getName);
Log.d("getUrl",getUrl);
}
}
public void serviceRemoved(ServiceEvent ev) {
notifyUser("Service removed: " + ev.getName());
}
public void serviceAdded(ServiceEvent event) {
// Required to force serviceResolved to be called again (after the first search)
jmdns.requestServiceInfo(event.getType(), event.getName(), 1);
}
});
serviceInfo = ServiceInfo.create("_http._tcp.local.", "AndroidTest", 0, "plain test service from android");
jmdns.registerService(serviceInfo);
} catch (IOException e) {
e.printStackTrace();
return;
}
}
public void alertDialog(final String getName, final String getUrl){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("SECE service found! Do you want to control the light?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Log.d("ACTION","BUTTON Pressed");
SendHttpPost(getName,getUrl);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
alert = builder.create();
alert.show();
}
private void SendHttpPost(String getName, String getUrl){
HttpGet httpget = new HttpGet(getUrl);
try {
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
byte buffer[] = new byte[1024] ;
InputStream is = entity.getContent() ;
int numBytes = is.read(buffer) ;
is.close();
String entityContents = new String(buffer,0,numBytes) ;
Log.d("getName",getName);
Log.d("getUrl",getUrl);
Log.d("replay",entityContents);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void notifyUser(final String msg) {
handler.postDelayed(new Runnable() {
public void run() {
TextView t = (TextView)findViewById(R.id.text);
t.setText("\n===========\n"+t.getText());
t.setText(msg+t.getText());
}
}, 1);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
if (jmdns != null) {
if (listener != null) {
jmdns.removeServiceListener(type, listener);
listener = null;
}
jmdns.unregisterAllServices();
try {
jmdns.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jmdns = null;
}
lock.release();
super.onStop();
}
然后我得到如下错误“04-23 21:56:25.031: E/WifiService(94): Multicaster binderDied04-23 21:56:25.041: E/WifiStateMachine(94): 错误!未处理的消息{ what=131156 when=-9ms }04-23 21:56:34.562: E/WifiStateMachine(94): 错误!未处理的消息{ what=131157 when=-3ms }04-23 21:56:53.952:A/NetworkStats(94):读取网络统计数据时出现问题04-23 21:56:53.952: A/NetworkStats(94): java.lang.IllegalStateException: 解析 idx 1 时出现问题...."
你有什么想法吗?
最佳答案
您可以尝试仔细检查您的网络权限
没有消失/改变。
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.INTERNET
android.permission.CHANGE_WIFI_MULTICAST_STATE
关于android - 在 Eclipse : Wifistatemachine errors 中使用 JmDNS 进行服务发现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10289100/
我正在尝试 jmDNS jar ,但是当我运行我的应用程序时,它会抛出类似 NoClassDefFoundError: javax.jmdns.JmDNS 的错误。 它从这一行抛出错误 jm
希望我的问题不是太愚蠢,但我遇到了以下问题...... 我正在将一个包含库 JmDNS 的 jar 导入到我的项目中。我的项目设置为像这样处理 JmDNS... setUp();
我正在使用 JmDNS 在网络中同一子网下的几台计算机中注册服务。然而,每次第二台机器启动并尝试注册服务时,其名称都会自动更改为“service_name(编号)”之类的名称。我认为发生这种情况是为了
我有一个我认为非常简单的问题。 我正在尝试使用 JmDNS 来广播我已经成功完成的服务,但是当应用程序暂停时,我想取消注册服务,然后在恢复应用程序时重新注册服务。 然而,我在执行此操作时遇到了问题。代
我已经能够获取 JmDNS 附带的示例来编译和运行,但是我无法获取任何类来发现我的服务。 我正在运行一个 Windows 环境,多台 PC 运行 VNC、SSH 和 Apache,我一直在尝试让 Jm
我正在尝试为 Android 应用程序和桌面应用程序之间的通信实现 JmDNS 发现。我遵循了以下教程: http://home.heeere.com/tech-androidjmdns.html A
我正在尝试使用 JmDNS 来检测网络上设备的添加和删除。添加工作正常,一旦设备各自的服务在 JmDNS 中注册,就会找到这些设备,但是,当设备从网络中删除时,它永远不会在 JmDNS 中注册。 我曾
我正在尝试实现一个类来发现网络上的服务。我试过使用 Android's NSD它确实发现服务很好,但它只支持 API 级别 16 及更高级别,而且我似乎无法检索服务信息中的 txtRecord 字段(
使用jmdns 3.4.1,我可以看到局域网中机器发布的服务,我也可以创建一个服务并注册它,这样我就可以在我的机器上看到它。但是,当我在局域网的另一台机器上新建服务时,在我的机器上是看不到的。我在另一
我已经创建了 JmDNS 示例: public class Service { public static void main(String[] args) { try { J
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我已经在我的 linux 电脑上使用 mdnsreponder(applebonjour) 为我的服务注册了子类型 .我正在尝试在我的 Galaxy 手机上使用 jmdns(这里我有 jmdns.ja
您好,我创建了示例 jmdns serviceListner,当我运行它时,它应该继续列出它找到的服务,但是通过这个我的程序,它在运行时列出了一些服务,之后它不列出任何服务。而且我的 google
我正在使用 ( http://jmdns.sourceforge.net/) 将发现添加到我们的应用程序中。它实际上在我的小型家庭网络上正常工作。但它在办公室的大型网络上失败了。我似乎记得读过,如果一
我在 Raspberry Pi 设备上启动并运行 JmDNS 时遇到问题。该应用程序在各种 x86 Linux 上运行良好,但在 Raspberry(运行“Raspbian GNU/Linux 8 (
我正在尝试让 JmDNS 在我的 android 程序中工作。我能够让它发现我想要的设备,但我不完全理解如何从 JmDNS 获取信息到启动 JmDNS 任务的对象。这是我的代码。 protected
我在让 JmDNS 与我的 Android AVD 一起工作时遇到了一些困难。我创建了 3 个应用程序。一个注册 ServiceListener 并记录任何 Activity 的 Android 应用
我正在用 Java(使用 Spark)开发一个 Web 应用程序,我希望它使用 JmDNS 以便能够在我的 Android 应用程序中找到此服务器。我按照 JmDNS page 中的步骤进行服务注册,
我正在通过其他运行 windows-xp 的机器创建 JmDNS 服务 JmDNS dns = JmDNS.create("localhost"); dns.regesterService("_sre
前言:从 SDK 级别 16 开始,Android 有一个内置的 Zeroconf 实现。除非青铜时代的兼容性是一个问题,否则不要再使用 jmDNS,而是使用 NsdManager。 前言 #2:Ns
我是一名优秀的程序员,十分优秀!