标签: android-networking

wpa_supplicant是针对Android设备特定还是Android版本特定的?

我最近购买了索尼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

6
推荐指数
1
解决办法
1992
查看次数

什么是 Android ProcessKiller?

有人知道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 卡时会发生这种情况。所以我无法再访问该文件,因此无法关闭 …

android android-networking android-file

6
推荐指数
0
解决办法
2219
查看次数

Android:在父进程退出后,停止运行Bonjour服务

我的应用程序本质上是一个后台服务,需要偶尔注册一个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在主服务崩溃后,我如何确保不会留下一堆乱七八糟的僵尸服务?

android android-service android-networking android-nsd

6
推荐指数
1
解决办法
866
查看次数

android 热点上的网络服务器 - 它的 IP 是什么?

我想将安卓手机设置为 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)

ip webserver android android-networking hotspot

6
推荐指数
1
解决办法
3660
查看次数

Android MediaPlayer默认超时

有人知道,当使用HTTP URL作为源时,Android的MediaPlayer类的默认超时是多少?就我搜索而言,不可能设置此超时(与HttpURLConnection不同),并且只通过实现MediaPlayer.OnErrorListener接口获取有关它的信息,但是任何人都会在默认超时之后发送对此的调用方法(MediaPlayer.OnErrorListener.onError())(还有"什么"和"额外"的API前级别17)?

android android-networking android-mediaplayer androidhttpclient

5
推荐指数
0
解决办法
1573
查看次数

无法从后台服务通过WiFi访问Internet

我会直接了解我发现的一些事实/数据,如果你遇到/解决了类似的问题,请帮助我.

我发回的数据每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())有没有人有相同的解决方案?

java android connectivity android-networking android-wifi

5
推荐指数
1
解决办法
1800
查看次数

当第一个失败并返回401 Unauthorized时,请重做先前的请求

我正在构建一个Android应用程序,该应用程序将从REST API中获取数据。

为了发出请求,我将RetrofitOtto一起使用。

对于我的所有请求,我添加一个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,然后再次执行第一个请求。

我不太确定如何进行这项工作。

java android android-networking retrofit

5
推荐指数
1
解决办法
1661
查看次数

如何处理网络问题

我的一个应用程序使用大量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

5
推荐指数
1
解决办法
509
查看次数

在Android上连接WIFI后如何通过移动网络保持连接?

我注意到,当通过3G(移动)连接从远程服务器传输音频时,当WIFI断开或关闭时,只要WIFI被激活并连接,就会丢弃通过3G的连接.

即使现在连接了WIFI,我也希望应用程序继续使用3G.我想这样做是为了保持连续性.(用户可以选择加入/退出此行为).

有没有特殊的旗帜,锁等等.为此目的?

android connectivity android-networking android-wifi

5
推荐指数
1
解决办法
7325
查看次数

连接到已配置的网络时,Android WiFi Manager网络开关

在最新版本的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 android-networking wifimanager android-wifi

5
推荐指数
1
解决办法
550
查看次数