Android:使用 Android API 29 的 Ricoh Theta 连接问题

Posted

技术标签:

【中文标题】Android:使用 Android API 29 的 Ricoh Theta 连接问题【英文标题】:Android: Ricoh Theta connection issue using Android API 29 【发布时间】:2020-10-17 16:50:18 【问题描述】:

我使用 android 设备连接到 Theta 相机拍摄 360 度全景照片。在 API 级别 28 之前,我们现有的代码可以正常工作,但是使用新的 API 29,wifi(hotspot) 连接功能已被弃用,使用新的NetworkSpecifier 功能,我可以连接到设备;但我无法向 Theta 相机发出任何 API 请求。

GET http://192.168.1.1/osc/info 这样的请求总是失败,即使在移动网络浏览器中也是如此。 错误信息:

Caused by: java.net.ConnectException: failed to connect to /192.168.1.1 (port 80) from /:: (port 0) after 10000ms: connect failed: ENETUNREACH (Network is unreachable)

这是我连接到 Theta 相机的代码。

final WifiNetworkSpecifier specifier = new WifiNetworkSpecifier.Builder()
             //.setSsidPattern(new PatternMatcher(ssid, PatternMatcher.PATTERN_PREFIX))
               .setSsid(ssid)
               .setWpa2Passphrase(passPhrase)
               .setBssid(MacAddress.fromString(i.BSSID))
               .build();
               
final NetworkRequest request = new NetworkRequest.Builder()
                        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                        .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                        .setNetworkSpecifier(specifier)
                        .build();

final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

final ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() 
            @Override
            public void onAvailable(@NonNull android.net.Network network) super.onAvailable(network);
            @Override
            public void onUnavailable()  super.onUnavailable();
            @Override
            public void onLost(@NonNull android.net.Network network)  super.onLost(network);
        ;
//connectivityManager.registerNetworkCallback(request, networkCallback);
connectivityManager.requestNetwork(request, networkCallback);
                            
                            

正如我所说,我可以连接到 Theta 相机,并且我的 Android 设备 wifi 连接显示“通过 MyApp 连接”。但是与设备通信的 API 总是失败。现在,如果我通过进入设备 wifi 设置并选择 Theta 相机手动连接设备。

【问题讨论】:

你为什么回滚我的编辑? Android 10(API 级别 29)已经有一个标签。你真的应该使用它。抱歉干预 因为运行 Android 10 的设备不会出现此问题。但是当您将 targetSDKVersion 更改为 29 时,您会看到此问题。 这实际上意味着“以 Android 10 为目标”,所以这个标签在这里有意义 【参考方案1】:

我能够找出问题并解决问题。我需要为所有传出流量绑定新网络(Theta Camera)。 Android开发者论坛中没有提到它。因此,在网络可用性方面,我们需要这样做。 下面是代码-

private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() 

@Override
public void onAvailable(@NonNull android.net.Network network) 
    super.onAvailable(network);
    connectivityManager.bindProcessToNetwork(network);
    Timber.d("++++++ network connected - %s", network.toString());
;

【讨论】:

以上是关于Android:使用 Android API 29 的 Ricoh Theta 连接问题的主要内容,如果未能解决你的问题,请参考以下文章

Cordova [Android 平台] 从 API 29 迁移到 API 30

android studio 中的 GPS 状态 - API 级别 29

Android 10(api 29)camera2 api回归与广角相机

在 android API29+ 中检测来电和去电

更改 NumberPicker 分隔线颜色不适用于 Android Api 29+

列出 Android Q / API 29 上的 WiFi 网络