Android:Ricoh Theta 连接问题使用 Android API 29
Android: Ricoh Theta connection issue using Android API 29
我使用 Android 设备连接到 Theta 相机拍摄 360 度全景照片。直到 API 级别 28,我们现有的代码工作正常,但是使用新的 API 29,wifi(热点)连接功能已被弃用,使用新的 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 连接显示 'Connected via MyApp'。但是 API 与设备的通信总是失败。现在,如果我通过进入我的设备 wifi 设置和 select Theta 相机手动连接设备。
我能够找出问题并解决问题。我需要为所有传出流量绑定新网络(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 设备连接到 Theta 相机拍摄 360 度全景照片。直到 API 级别 28,我们现有的代码工作正常,但是使用新的 API 29,wifi(热点)连接功能已被弃用,使用新的 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 连接显示 'Connected via MyApp'。但是 API 与设备的通信总是失败。现在,如果我通过进入我的设备 wifi 设置和 select Theta 相机手动连接设备。
我能够找出问题并解决问题。我需要为所有传出流量绑定新网络(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());
}};