我最近购买了索尼xperia P,但它无法检测到ad-hoc网络.经过一些谷歌搜索后我才知道android不支持ad-hoc网络,我没有修改/ system/bin/wpa_supplicant文件,这样它也可以显示ad-hoc网络.我在github上发现了很多修改过的文件,但我不知道应该使用哪一个.文件wpa_supplicant设备是特定的还是特定于Android版本的?我的Android版本是4.0.4(索尼xperia P),任何人都可以给我我的手机可以使用的确切文件.
android android-networking android-wifi android-wireless android-internet
有人知道Android上的ProcessKiller进程吗?看来它杀死了我的应用程序,因为它有一个打开的文件。当我将文件下载到 SD 卡,然后在下载过程中拔出卡时,就会发生这种情况。这就是 logcat 所说的。
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
Run Code Online (Sandbox Code Playgroud)
我无法正确关闭该文件,因为它是我下载的临时文件,当用户在下载过程中拔出 SD 卡时会发生这种情况。所以我无法再访问该文件,因此无法关闭 …
我的应用程序本质上是一个后台服务,需要偶尔注册一个NSD服务(Bonjour服务),以便能够发现由主后台服务运行的套接字服务器(也就是由app运行).
如果我正确阅读Android Bonjour服务文档,这就是您启动Bonjour服务的方式(缩写为简洁):
mNsdManager = Context.getSystemService(Context.NSD_SERVICE);
mDiscoveryListener = new NsdManager.DiscoveryListener()
mNsdManager.discoverServices(
SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);
Run Code Online (Sandbox Code Playgroud)
......这就是你如何阻止它:
mNsdManager.unregisterService(mRegistrationListener);
Run Code Online (Sandbox Code Playgroud)
在这里,我无法解决这个问题:如果主服务突然Bonjour崩溃,那么在崩溃时注册的任何服务都会继续运行,即使它不再具有目的(它帮助发现的套接字服务器不是更长的).
Bonjour当主服务重新启动时,我无法事件清理僵尸服务,因为mRegistrationListener最初注册的服务也不再存在.
我怀疑我采取了错误的方法:Bonjour在主服务崩溃后,我如何确保不会留下一堆乱七八糟的僵尸服务?
我想将安卓手机设置为 wifi 热点,然后在其上运行网络服务器,并从连接到热点的另一部手机浏览它。
我的手机没有 root,但我有termux,它有很多 unix 实用程序。我不想安装额外的应用程序。(但很高兴写一个!)
我可以在http://localhost(在主机上)查看 python 的简单网络服务器,但不能在另一部手机上查看。我尝试使用主机电话的面向公众的 IP(使用 whatsmyip 类型的网页检查它),但没有用。有人说移动 ISP 通过映射不同的内部和外部 IP 来防止这种情况……但在这里,它不是通过 ISP,而是通过热点……
我还尝试了来自ifconfig和来自 android 中的 wifi 控件的IP 地址,这确实适用netcat- 但只有连接到热点(而不是主机)的客户端电话的 IP。
也就是说,netcat在连接到netcat热点的手机上收听,然后在热点手机上连接到它。(ierole 交换:热点客户端是 netcat 服务器)。古怪,热点电话似乎并不具有一个IP(至少,不是一个我已经能够发现,到目前为止)。但它必须有一个,不是netcat吗,为了连接......?
无论如何,我想要热点主机上的网络服务器,所以我需要它的IP来连接它......有没有办法得到它?
这一直困扰着我多年。非常感谢您的帮助!
编辑这个问题的答案说它(几乎)总是 192.168.43.1。我现在无法尝试;我有时会更新。
更新
1.192.168.43.1工作
2.py http.server适用于常规文件(例如 txt、pdf),但视频文件似乎需要一些它缺少的流媒体协议。我发现lighttpd有这个(在termuxusing 中可用apt install lighttpd)。但它需要配置(没有eg/default)。我用了:
$ cat > lighttp.conf
dir-listing.activate = "enable"
server.port …Run Code Online (Sandbox Code Playgroud) 有人知道,当使用HTTP URL作为源时,Android的MediaPlayer类的默认超时是多少?就我搜索而言,不可能设置此超时(与HttpURLConnection不同),并且只通过实现MediaPlayer.OnErrorListener接口获取有关它的信息,但是任何人都会在默认超时之后发送对此的调用方法(MediaPlayer.OnErrorListener.onError())(还有"什么"和"额外"的API前级别17)?
android android-networking android-mediaplayer androidhttpclient
我会直接了解我发现的一些事实/数据,如果你遇到/解决了类似的问题,请帮助我.
我发回的数据每5分钟到一个服务器,除非用户手动切换它砍掉的帮助下wakeful broadcast receiver通过intent service.另外我在做之前得到了wifi锁(我已经尝试过这个没有锁;也没有工作)
现在,从普通数据网络发回数据设备(2G/3G/4G)能正常工作,但对那些连接到WiFi网络在某种程度上得到我getActiveNetworkInfo()的null(甚至直接打到该网页的网址给出了hostname not found error)这确实发生在HTC一(安装v.4.4.2)其他设备工作正常.
我们都知道,即使网络没有/可用,以前的官方连接管理器在返回过多的真/假条件方面也存在问题.我非常怀疑他们是否再次出现或只是一些定制的OEM jing-bang
警报被触发>> wakeful broadcast receiver >> get wifi locks >> sleep the thread for 3 secs inside the获取锁后触发onReceive`以等待wifi恢复连接>>之后我的服务工作.
我正在权衡强制使用移动数据连接而不是wifi的可能性.(通过使用startUsingNetworkFeature())有没有人有相同的解决方案?
我正在构建一个Android应用程序,该应用程序将从REST API中获取数据。
对于我的所有请求,我添加一个RequestInterceptor,它将为我的所有请求添加标头(授权)。在RequestInterceptor中,我正在对当前的access_token调用一个方法,然后将标头填充到请求中。
RequestInterceptor requestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
Token token = TokenPreferences.getToken();
request.addHeader("Authorization", token.getTokenType() + " " + token.getAccessToken());
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://example.com")
.setRequestInterceptor(requestInterceptor)
.build();
...
Run Code Online (Sandbox Code Playgroud)
在access_token过期之前,此方法可以正常工作,然后请求将失败,且HTTP状态为401 Unauthorized。发生这种情况时,我想发出一个新请求以从我得到的refresh_token中获取一个新的access_token,然后再次执行第一个请求。
我不太确定如何进行这项工作。
我的一个应用程序使用大量HTTP请求与其后端进行通信.我使用2种不同的实现来执行这些请求:
Volley大多数情况下的库AsyncTask,并DefaultHttpClient为少数病例大多数时候,一切都运作良好.但有时我会提出一系列网络异常,并将其展示给Crashlytics:
java.net.UnknownHostException: Unable to resolve host "mydomain.com": No address associated with hostname
Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
com.android.volley.ServerError
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:175)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:110)
通过一些研究,我发现这应该发生在设备有一个非常糟糕的3g/4g或在VPN /子网后面,所以它无法到达我的网站.
如何确保设备真正连接到互联网?我实际上只有在此函数返回true时才执行这些请求:
public static boolean isOnline(Context ctx) {
ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
或者我应该放手,并假设每月达到几百个这样的警告是正常的?
java android httpconnection android-networking android-volley
我注意到,当通过3G(移动)连接从远程服务器传输音频时,当WIFI断开或关闭时,只要WIFI被激活并连接,就会丢弃通过3G的连接.
即使现在连接了WIFI,我也希望应用程序继续使用3G.我想这样做是为了保持连续性.(用户可以选择加入/退出此行为).
有没有特殊的旗帜,锁等等.为此目的?
在最新版本的Android(特别是在Pixel上)上与Wifi Manager交互时,我看到一些有趣的行为。我正在尝试使WIFI管理器连接到已知的热点(IOT设备)。
Google在博客文章中清楚地列出了步骤,如果您使用的是棒棒糖,则需要绑定到特定的网络以确保您的网络请求通过给定的网络传递。可以在这里找到步骤https://android-developers.googleblog.com/2016/07/connecting-your-app-to-wifi-device.html
列出的步骤在正常情况下可以正常工作(您可以通过扫描搜索接入点并进行添加网络,因为之前没有进行配置)。但是,如果接入点是从Wifi列表中手动连接的,则添加网络将会失败(从Android M及更高版本开始,您将无法更改由其他应用或系统完成的wifi配置),而我必须连接至已配置的网络。这种情况总是会在大约20-30秒后导致网络切换。
我认为这是由https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java引起的,因为Google打电话回家并检查是否网络有互联网。
但是我不知道为什么只有在以前通过“设置”->“ Wifi”连接网络时才会发生这种情况
很抱歉,如果有人知道为什么会发生这种长篇大论的帖子,并且有任何阻止它的方法,我们将不胜感激。请注意,无法在M及更高版本上更新wifi配置。另外,禁用网络也无济于事。同样有趣的是,这仅发生在像素上,而不发生在Samsung设备上(没有网络代理?)。
android ×10
android-wifi ×4
java ×3
connectivity ×2
android-file ×1
android-nsd ×1
hotspot ×1
ip ×1
retrofit ×1
webserver ×1
wifimanager ×1