Articles of android networking

在Android 3.x和4.x上为Wifinetworking分配静态IP地址

我工作的一个项目,应该有一个function,如果用户需要设置静态IP地址(DNS,networking掩码,网关)的Wifi 。 我最初的和实际的解决scheme是使用android.provider.Settings.System类,它允许这个function,但是这个解决scheme只适用于Android 2.x设备。 这很好,当然,我不完全是零,但它会很好,也适用于更高版本的Android操作系统。 它不知道为什么它不起作用。 如果我使用这个简单的方法来检查实际状态: public static final boolean hasStaticIp(Context c) { try { return Settings.System.getInt(c.getContentResolver(), Settings.System.WIFI_USE_STATIC_IP) == 1; } catch (SettingNotFoundException e) { Log.i(TAG, "Settings not found (" + e.geMessage() + ")"); return false; } } 它对于Android 2.x和Android 4.x都会返回true,但是在第二种情况下,更改肯定不会反映在Wifi我发现这是一个小小的硬编码解决scheme,但没有像预期的那样工作。 有没有人面对同样的问题? 我会很高兴任何工作的解决scheme,也为根植的设备(也许一些命令在Linux),因为它很容易检查手机是否根源的状态。 提前致谢。

ConnectivityManager getActiveNetworkInfo空指针exception

连接pipe理器中偶尔会看到空指针exception。 从intent服务,我isOnWIFI(this)检查networking状态。 在cm.getActiveNetworkInfo()行发生exception。 这很奇怪,因为在我调用这个之前我检查了null。 注意:权限已设置。 public static boolean isOnWIFI(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); return cm != null //here occurs NullPointerException && cm.getActiveNetworkInfo() != null && ((cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && cm.getNetworkInfo( ConnectivityManager.TYPE_WIFI).isConnected())); } 任何想法为什么会发生 我无法debugging它,因为它只是偶尔从错误报告。 我只看到解决scheme是把它放到try catch块。 谢谢。

在Android上传和下载率剖析

我试图开发一个Android应用程序来测量我的networking的上传和下载速度,这可能需要运行和configuration文件,每2秒左右。 SpeedTest.net应用程序是一个理想的应用程序,但是,它不是开源的。 而且,我需要它每2秒运行一次。 完成testing需要几秒钟的时间。 我怎样才能做到这一点? 目前我只是下载一个在互联网上发现的小随机.txt文件,并测量size/time-to-download作为衡量下载速度。 但我每次都会得到奇怪的结果。 显然这种方法是行不通的。 更新:下载完成。 有关如何实现上传速度的任何build议?

如何以编程方式查找设备的外部IP地址而不使用外部主机?

当我读取设备的IP地址时,我总是得到本地IP地址。 我使用下面的代码片段来做到这一点。 public String getIpAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { String ip = Formatter.formatIpAddress(inetAddress.hashCode()); Log.d("VPNConnected",ip); return ip; } } } } catch (Exception ex) { Log.d("exception", ex.toString()); } return "EMPTY"; } 但我需要阅读外部IP地址,而不使用任何外部主机或网页apis,如http://jsonip.com

Patch Request Android Volley

我正在使用Android的排气networking库在我正在进行的一个项目。 我已经从https://android.googlesource.com/platform/frameworks/volley/下拉了主分支,所以我的库项目应该是最新的,但只支持以下请求方法: /** * Supported request methods. */ public interface Method { int DEPRECATED_GET_OR_POST = -1; int GET = 0; int POST = 1; int PUT = 2; int DELETE = 3; } 扩展库来支持补丁请求可能不会太麻烦,所以我的问题是为什么补丁请求不被基本库支持? 此外,任何人都可以提出任何好的git分支已经join了这种支持?

Android广播地址

我为我的Android手机制作了一个Client Server应用程序。 我已经创build了一个Python的UDP服务器,它坐在和监听连接。 我可以把服务器的IP地址直接192.169.0.100 ,并且发送数据正常。 我也可以把192.168.0.255 ,并find192.169.0.100上的服务器。 是否有可能获得我的Android手机连接到networking的广播地址? 我只会在我的Wifinetworking或其他Wifinetworking上使用此应用程序。 干杯

Android ConnectivityManager没有看到权限ACCESS_NETWORK_STATE

我有简单的代码,想读取networking连接的状态。 我已经添加了AndroidManifest.xml的权限: <user-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 我试图访问networking状态的代码: ConnectivityManager conmgr = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ninfo = conmgr.getActiveNetworkInfo(); 而抛出的错误: E/AndroidRuntime(7650): java.lang.SecurityException: ConnectivityService: Neither user 10080 nor current process has android.permission.ACCESS_NETWORK_STATE. 我一直试图find任何错误,但一切似乎拼写正确。 好像新版本的AndroidManifest没有被部署到设备上。 我已经尝试在Eclipse中清理项目,从手机中卸载应用程序,但没有任何工作,我再次得到同样的沟通。 我做错了什么?

SyncAdapter- onPerformSync没有互联网接入

我有一个SyncAdapter类,它连接到MQTT代理并发布服务器的有效负载以接收有效负载。 但是,似乎即使调用了onPerformSync()方法,互联网访问也不存在。 我以为使用SyncAdapter保证上网吗? 这是SyncAdapter类 public class SyncAdapter extends AbstractThreadedSyncAdapter { private static final String TAG = SyncAdapter.class.getSimpleName(); private MqttHelper mqttHelper; public SyncAdapter(Context context, boolean autoInitialize) { super(context, autoInitialize); mqttHelper = new MqttHelper(getContext()); } public SyncAdapter(Context context, boolean autoInitialize, boolean allowParallelSyncs) { super(context, autoInitialize, allowParallelSyncs); } private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo […]

unit testingnetworking响应。 debugging时工作,而不是实际运行时

我目前正在尝试testingnetworking响应是否正在被接收。 虽然我明白,这不是我应该做的testing方面,它是对我自己的意愿的好奇心,我希望如果可能的话继续下去。 现在,我已经成功地创build了testing。 一个请求发送到一个齐射队列没有问题。 现在奇怪的是: 该请求从未执行。 以下是我如何testing它的一个想法: @Test public void testSimpleGetResponseFromServerVolley() throws Exception { final CountDownLatch signal = new CountDownLatch(1); NetworkClass.NetworkListener listener = new NetworkClass.NetworkListener() { @Override public void onResponse(Response response) { assertThat(response != null); System.out.println("Got Response"); signal.countDown(); } @Override public void onError(Throwable error) { System.out.println("No Response"); signal.countDown(); } }; NetworkClass.getResponseFromServer(null, listener); signal.await(); } 此代码意外地导致testing挂起,并从未完成。 […]

Retrofit 2不能上传带有两个额外单独string参数的文件

阅读编辑问题底部的可能替代解决scheme,直到find解决scheme 。 这是一个使用POSTMan的两个参数的成功的文件。 我正在尝试做同样的改造,但收到BadRequest。 PostMan设置: Chromenetworking发布详情: 下面是我在Android中如何做这个但失败: 改造服务接口: @Multipart @POST("jobDocuments/upload") Call<ResponseBody> upload(@Part("file") MultipartBody.Part file,@Part("folder") MultipartBody.Part folder,@Part("name") MultipartBody.Part name); 这是我的@Background方法来运行networking请求与上述服务生成 CustDataClient service = ServiceGenerator.createService(CustDataClient.class); File file = new File(fileUri.getPath()); // create RequestBody instance from file RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part fileData = MultipartBody.Part.createFormData("file", fileName, requestFile); MultipartBody.Part folder = MultipartBody.Part.createFormData("folder", "LeadDocuments"); MultipartBody.Part name = MultipartBody.Part.createFormData("name", fileName); […]