标签: android-networking

移动数据打开时通过wifi(无互联网)发送数据

我正在开发和通过wifi(由设备生成)连接到硬件设备并通过套接字连接向其发送数据的应用程序.问题是,当移动数据(3G/4G)被激活时,android会尝试通过它发送数据而不是通过设备生成的wifi发送数据,因为因为wifi没有互联网连接.我正在考虑使用ConnectivityManager#setNetworkPreference(),但它在api 21中已被弃用.

如何设置它使用设备生成的wifi而不是移动数据接口发送数据?

sockets android android-networking android-wifi network-interface

9
推荐指数
1
解决办法
5479
查看次数

以编程方式捕获网络流量(无根)

我正在尝试查找资源或库,这些资源或库可以允许我以编程方式捕获设备的所有网络数据包的流量,无论是来自wifi还是移动网络.我相信不需要root权限才能在这个混杂模式的鲨鱼根本就请求,因为有这个程序在Play商店中,可以捕获所有网络流量(甚至解密用MITM SSL),而不需要root权限.我根本无法弄清楚如何做同样的事情.

我的问题是:这个应用程序是如何实现此捕获的?他们使用了什么API?

谢谢您的帮助.

android network-programming packet-sniffers android-networking

9
推荐指数
1
解决办法
8174
查看次数

Android广播地址

我正在为我的Android手机制作一个Client Server应用程序.

我创建了一个UDP服务器,Python其中坐着并侦听连接.

我可以IP直接放置服务器地址192.169.0.100,它可以很好地发送数据.我也可以放入192.168.0.255并找到服务器192.169.0.100.

是否可以获取我的Android手机所连接的网络的广播地址?我只会在我的Wifi网络或其他Wifi网络上使用此应用程序.

干杯

java android udp broadcast android-networking

8
推荐指数
3
解决办法
2万
查看次数

Android:更新网络连接可用性小部件

嗨朋友们,

我有一个主屏幕Widget,它调用webservice并显示一些内容.现在问题是当设备丢失连接时我需要用"无连接"消息更新小部件,并且每当设备重新获得连接时,我必须通过调用webservice再次更新小部件.任何想法请分享.

提前致谢

以下链接还提供了良好的解决方案:

如何监控Android中的网络连接状态?

android android-widget android-networking

8
推荐指数
0
解决办法
1395
查看次数

Android ConnectivityManager未看到权限ACCESS_NETWORK_STATE

我有简单的代码,想要读取网络连接的状态.我已经添加了AndroidManifest.xml的权限:

<user-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Run Code Online (Sandbox Code Playgroud)

我试图访问网络状态的代码:

    ConnectivityManager conmgr = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo ninfo = conmgr.getActiveNetworkInfo();
Run Code Online (Sandbox Code Playgroud)

并抛出错误:

 E/AndroidRuntime(7650): java.lang.SecurityException: ConnectivityService: Neither user 10080 nor current process has android.permission.ACCESS_NETWORK_STATE.
Run Code Online (Sandbox Code Playgroud)

我一直试图找到任何错误,但一切似乎拼写正确.似乎AndroidManifest的新版本未部署到设备.我试图在Eclipse中清理项目,从手机上卸载应用程序,但没有任何工作,我再次进行相同的通信.我做错了什么?

eclipse android android-networking eclipse-adt

8
推荐指数
1
解决办法
1万
查看次数

android中java.net.Socket的默认超时值是多少?

我正在为Android开发一个移动应用程序.在那里,我在Android手机和Windows应用程序(在PC,笔记本电脑上运行)之间创建套接字和传输数据.我正在使用android 2.3

测试移动三星galaxy pop
电脑和手机通过USB连接进行连接.
数据传输正确.
但是一个问题是在应用程序中间通过拔掉系统中的移动usb caple而取消了标题,然后我抛出了异常.

但有时它不会通过任何异常它只是等待,Socket也没有关闭等待数据读取
所以请在android中发送默认的套接字超时时间


我的示例代码如下

    Socket socket=null;
    DataOutputStream dos=null;
    OutputStream os=null;
    InputStream is=null;
    DataInputStream dis=null;

    try
    {
        Log.i(tagName, "b4 creating socket");
        socket=new Socket(this.getIpAddress(),this.getPort_number());                   
        is=socket.getInputStream();             
        dos=new DataOutputStream(os);       
        dis=new DataInputStream(is);            
    }
    catch(UnknownHostException unknown_ex)
    {
        Log.i(tagName, "Exception host unknown : "+unknown_ex.toString());
        unknown_ex.printStackTrace();           
    }
    catch(IOException ioe_ex)
    {
        Log.i(tagName, "ioe Exception : "+ioe_ex.toString());           
        ioe_ex.printStackTrace();           
    }
    catch(Exception ex)
    {
        Log.i(tagName, "Exception : "+ex.toString());       
        ex.printStackTrace();       
    }

    if(dos!=null)
    {
        try
        {
            dos.close();
        }
        catch(Exception ex)
        {

        }
    }

    if(dis!=null)
    { …
Run Code Online (Sandbox Code Playgroud)

java sockets android android-networking socket-timeout-exception

8
推荐指数
1
解决办法
2万
查看次数

如何在不使用外部主机的情况下以编程方式查找设备的外部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";
    }
Run Code Online (Sandbox Code Playgroud)

但我需要在不使用任何外部主机或web apis(如http://jsonip.com)的情况下读取外部IP地址

java android traceroute nat-traversal android-networking

8
推荐指数
1
解决办法
4742
查看次数

应用程序关闭时如何接收Android Nougat的网络丢失回调?

我希望能够在关闭应用程序时进行任何网络更改或任何网络连接丢失,唤醒应用程序的绑定服务.过去通过侦听CONNECTIVITY_CHANGE广播来完成,之后在Android Nougat中弃用了这个广播.只有当应用程序通过编程创建广播接收器打开时,人们仍然可以收听这些广播,但是如果关闭我的应用也需要被唤醒.

我注意到ConnectivityManager.registerNetworkCallback(NetworkRequest,PendingIntent)方法及其JavaDoc声称它在应用程序关闭时可以正常工作,但是当我从我的服务中调用它时,它似乎只能在它停止响应事件之前工作一次.我看到了ConnectivityManager.registerNetworkCallback(NetworkRequest,NetworkCallback)的类似问题,这是一个仅适用于应用程序打开的Lollipop功能.如何让这个基于PendingIntent的回调始终如一?

所有替代谷歌暗示到位CONNECTIVITY_CHANGE广播的只是检查是否有网络的存在.其中大多数是作业调度服务.他们假设CONNECTIVITY_CHANGE广播仅用于等待网络可用性来执行作业.但是,我的应用程序是VPN网络实用程序,因此我需要在任何网络更改时收到通知 - 我不仅仅是在等待网络的存在.

谢谢你的帮助!

networking android broadcastreceiver android-networking android-7.0-nougat

8
推荐指数
1
解决办法
1119
查看次数

SyncAdapter- onPerformSync无法访问Internet

我有一个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 activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }

    @Override
    public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, …
Run Code Online (Sandbox Code Playgroud)

java android android-networking android-syncadapter

8
推荐指数
1
解决办法
418
查看次数

ConnectivityManager.requestNetwork() 未按预期工作

我正在尝试暂时强制设备使用移动数据。我在用ConnectivityManager.requestNetwork()

    NetworkRequest.Builder request = new NetworkRequest.Builder();
    request.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
    request.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);

    connectivityManager.requestNetwork(request.build(), newRequestTransportCallback(connectivityManager),
            (int) TimeUnit.SECONDS.toMillis(10));
Run Code Online (Sandbox Code Playgroud)

哪里newRequestTransportCallback()的回报,

new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(Network network) {
                Log.d(TAG,"Network available: " + network + ", binding...");
                if (cm.bindProcessToNetwork(network)) {
                    Log.d(TAG,"Bind successful to network: " + network);
                } else {
                    Log.w(TAG,"Bind failed to network: " + network);
                }
            }

            @Override
            public void onUnavailable() {
                Log.w(TAG,"Network not available");
            }
        };
Run Code Online (Sandbox Code Playgroud)

我可以从我的日志语句中看到请求和绑定成功。但是,当我随后调用ConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)它时,它告诉我网络已断开连接(并且我尝试轮询以查看更新网络信息是否有延迟,但也没有成功)。

android android-networking android-connectivitymanager

8
推荐指数
0
解决办法
1503
查看次数