相关疑难解决方法(0)

强制Android使用没有互联网的Wifi网络

我正在构建一个Android应用程序,需要通过无法访问互联网的WiFi网络进行通信.问题是,即使连接WiFi,当wifi网络上没有连接互联网时,机器人选择使用蜂窝/移动数据.

我已经阅读了许多关于该问题的帖子,其中许多涉及生根设备,但生产应用程序无法实现这一点(根设备不是一种选择).其他解决方案(如我的代码bellow)建议使用bindProcessToNetwork()哪个在我的Sony Z2上完美运行,但在我测试的其他设备上没有(所有运行6.0.1)

private void bindToNetwork() {
    final ConnectivityManager connectivityManager = (ConnectivityManager) mActivity.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkRequest.Builder builder;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        builder = new NetworkRequest.Builder();
        //set the transport type do WIFI
        builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
        connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(Network network) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {


                    connectivityManager.bindProcessToNetwork(null);
                    if (barCodeData.getSsid().contains("screenspace")) {
                        connectivityManager.bindProcessToNetwork(network);
                    }

                } else {
                    //This method was deprecated in API level 23
                    ConnectivityManager.setProcessDefaultNetwork(null);
                    if (barCodeData.getSsid().contains("screenspace")) {

                        ConnectivityManager.setProcessDefaultNetwork(network);
                    }
                }

                connectivityManager.unregisterNetworkCallback(this);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

networking android wifi access-point iot

29
推荐指数
1
解决办法
7751
查看次数

即使Android M上的移动数据为ON(带连接),也可通过WiFi(无连接)发送请求

我必须将UDP数据包发送到没有互联网连接的WiFi模块(提供自己的AP)但是当我将移动设备连接到AP时,Android会重定向移动数据接口上的数据包,因为它已经连接了互联网.

我已经使用下面的代码来完成我的工作,但它似乎不适用于Android M.

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setWifiInterfaceAsDefault() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkRequest.Builder builder = new NetworkRequest.Builder();
    NetworkRequest networkRequest= builder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .build();

    connectivityManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback());
}
Run Code Online (Sandbox Code Playgroud)

我还补充道

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
Run Code Online (Sandbox Code Playgroud)

在我的AndroidManifest.xml上,我确保自己Settings.System.canWrite(this)返回true但仍然没有.

提前致谢.

networking android android-wifi iot android-6.0-marshmallow

14
推荐指数
2
解决办法
3871
查看次数

当从没有互联网的WLAN请求下载时,下载无法在Android 9上开始

我正在研究一个Android应用,该应用使用WiFi连接到本地Flask服务器。然后,该应用程序显示存储在服务器(RPi3)上的图像。单击图像会触发下载请求,我希望Android DownloadManager将请求加入队列并下载图像。 WiFi网络不提供互联网访问。

到目前为止,我已经能够在Android 6和Android 8.1设备上对其进行测试,并且一切正常。在多个Android 9设备上进行测试后,下载未开始,但是从本地网络断开连接后,将显示失败的尝试。

阅读有关此内容的其他主题,我尝试了以下方法:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

并添加在AndroidManifest.xml中

android:networkSecurityConfig="@xml/network_security_config"
Run Code Online (Sandbox Code Playgroud)
.setRequiresCharging(false)
.setAllowedOverMetered(false)
.setAllowedOverRoaming(false)
.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, (String) url);
Run Code Online (Sandbox Code Playgroud)
  • 再次检查权限。这些已启用:
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)

这是我创建的下载请求

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url))
        .setTitle("Some Title") …
Run Code Online (Sandbox Code Playgroud)

android wifi flask android-download-manager android-9.0-pie

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