Skip to content

Commit 4323519

Browse files
committed
Android 10 対応: THETA プラグインの設定画面で THETA とWi-Fi接続できるように修正。
1 parent 2db262d commit 4323519

6 files changed

Lines changed: 106 additions & 201 deletions

File tree

dConnectDevicePlugin/dConnectDeviceTheta/app/src/main/java/org/deviceconnect/android/deviceplugin/theta/ThetaDeviceService.java

Lines changed: 4 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,17 @@
77
package org.deviceconnect.android.deviceplugin.theta;
88

99
import android.annotation.TargetApi;
10-
import android.content.BroadcastReceiver;
11-
import android.content.Context;
1210
import android.content.Intent;
13-
import android.content.IntentFilter;
14-
import android.net.ConnectivityManager;
15-
import android.net.Network;
16-
import android.net.NetworkCapabilities;
17-
import android.net.NetworkInfo;
18-
import android.net.NetworkRequest;
1911
import android.net.wifi.ScanResult;
20-
import android.net.wifi.WifiInfo;
21-
import android.net.wifi.WifiManager;
22-
import android.net.wifi.WifiNetworkSpecifier;
2312
import android.os.Build;
24-
import android.os.Handler;
25-
import android.os.Looper;
26-
import android.support.annotation.NonNull;
27-
import android.util.Log;
28-
import android.widget.Toast;
2913

3014
import com.theta360.lib.PtpipInitiator;
3115
import com.theta360.lib.ThetaException;
3216

3317
import org.deviceconnect.android.deviceplugin.theta.core.ThetaDevice;
3418
import org.deviceconnect.android.deviceplugin.theta.core.ThetaDeviceClient;
3519
import org.deviceconnect.android.deviceplugin.theta.core.ThetaDeviceEventListener;
36-
import org.deviceconnect.android.deviceplugin.theta.core.ThetaDeviceException;
37-
import org.deviceconnect.android.deviceplugin.theta.core.ThetaDeviceFactory;
3820
import org.deviceconnect.android.deviceplugin.theta.core.ThetaDeviceManager;
39-
import org.deviceconnect.android.deviceplugin.theta.core.ThetaV;
40-
import org.deviceconnect.android.deviceplugin.theta.core.wifi.WifiStateEventListener;
4121
import org.deviceconnect.android.deviceplugin.theta.profile.ThetaMediaStreamRecordingProfile;
4222
import org.deviceconnect.android.deviceplugin.theta.profile.ThetaOmnidirectionalImageProfile;
4323
import org.deviceconnect.android.deviceplugin.theta.profile.ThetaSystemProfile;
@@ -51,21 +31,16 @@
5131
import org.deviceconnect.android.provider.FileManager;
5232
import org.deviceconnect.android.service.DConnectService;
5333

54-
import java.io.IOException;
55-
import java.net.Socket;
5634
import java.util.ArrayList;
5735
import java.util.List;
5836
import java.util.logging.Logger;
5937

60-
import javax.net.SocketFactory;
61-
6238
/**
6339
* Theta Device Service.
6440
*
6541
* @author NTT DOCOMO, INC.
6642
*/
67-
public class ThetaDeviceService extends DConnectMessageService
68-
implements ThetaDeviceEventListener {
43+
public class ThetaDeviceService extends DConnectMessageService implements ThetaDeviceEventListener {
6944

7045
public static final String ACTION_CONNECT_WIFI = "action.CONNECT_WIFI";
7146

@@ -78,29 +53,6 @@ public class ThetaDeviceService extends DConnectMessageService
7853
private ThetaDeviceClient mClient;
7954
private FileManager mFileMgr;
8055
private ThetaMediaStreamRecordingProfile mThetaMediaStreamRecording;
81-
private WifiStateEventListener mListener;
82-
private BroadcastReceiver mWifiReceiver = new BroadcastReceiver() {
83-
@Override
84-
public void onReceive(Context context, Intent intent) {
85-
String action = intent.getAction();
86-
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
87-
WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
88-
mListener.onNetworkChanged(wifiInfo);
89-
} else if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
90-
int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
91-
switch (state) {
92-
case WifiManager.WIFI_STATE_DISABLED:
93-
mListener.onWiFiDisabled();
94-
break;
95-
case WifiManager.WIFI_STATE_ENABLED:
96-
mListener.onWiFiEnabled();
97-
break;
98-
default:
99-
break;
100-
}
101-
}
102-
}
103-
};
10456

10557
@Override
10658
public int onStartCommand(final Intent intent, final int flags, final int startId) {
@@ -115,28 +67,21 @@ public int onStartCommand(final Intent intent, final int flags, final int startI
11567
@Override
11668
public void onCreate() {
11769
super.onCreate();
118-
mListener = ((ThetaDeviceApplication) getApplication()).getDeviceManager();
70+
11971
ThetaDeviceApplication app = (ThetaDeviceApplication) getApplication();
12072
mDeviceMgr = app.getDeviceManager();
12173
mDeviceMgr.registerDeviceEventListener(this);
122-
mDeviceMgr.checkConnectedDevice();
12374
mDeviceMgr.startDeviceDetection();
12475
mClient = new ThetaDeviceClient(mDeviceMgr);
12576
mFileMgr = new FileManager(this);
12677

12778
EventManager.INSTANCE.setController(new MemoryCacheController());
12879

12980
getServiceProvider().addService(new ThetaImageService(app.getHeadTracker()));
130-
131-
IntentFilter filter = new IntentFilter();
132-
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
133-
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
134-
registerReceiver(mWifiReceiver, filter);
13581
}
13682

13783
@Override
13884
public void onDestroy() {
139-
unregisterReceiver(mWifiReceiver);
14085
mDeviceMgr.dispose();
14186
mDeviceMgr.unregisterDeviceEventListener(this);
14287
try {
@@ -236,41 +181,7 @@ private void resetPluginResource() {
236181

237182
@TargetApi(Build.VERSION_CODES.Q)
238183
private void connectWifi(final ScanResult result) {
239-
WifiNetworkSpecifier specifier = new WifiNetworkSpecifier.Builder()
240-
.setSsid(result.SSID)
241-
.setWpa2Passphrase(parsePassword(result.SSID))
242-
.build();
243-
NetworkRequest request = new NetworkRequest.Builder()
244-
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
245-
.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
246-
.setNetworkSpecifier(specifier)
247-
.build();
248-
requestNetwork(request);
249-
}
250-
251-
@TargetApi(Build.VERSION_CODES.Q)
252-
private boolean requestNetwork(final NetworkRequest request) {
253-
ConnectivityManager connectivityManager = getConnectivityManager();
254-
if (connectivityManager == null) {
255-
return false;
256-
}
257-
final ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
258-
@Override
259-
public void onAvailable(final @NonNull Network network) {
260-
super.onAvailable(network);
261-
262-
Toast.makeText(getApplicationContext(), "onAvailable", Toast.LENGTH_LONG).show();
263-
}
264-
};
265-
connectivityManager.requestNetwork(request, callback, new Handler(Looper.getMainLooper()));
266-
return true;
267-
}
268-
269-
private String parsePassword(final String ssid) {
270-
return ssid.substring(7, 7 + 8);
271-
}
272-
273-
private ConnectivityManager getConnectivityManager() {
274-
return (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
184+
ThetaDeviceManager deviceManager = ((ThetaDeviceApplication) getApplication()).getDeviceManager();
185+
deviceManager.requestNetwork(result.SSID);
275186
}
276187
}

dConnectDevicePlugin/dConnectDeviceTheta/app/src/main/java/org/deviceconnect/android/deviceplugin/theta/activity/ThetaDeviceActivity.java

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -37,51 +37,23 @@ public class ThetaDeviceActivity extends FragmentActivity {
3737
* An instance of {@link ThetaDeviceManager}.
3838
*/
3939
private ThetaDeviceManager mDeviceMgr;
40-
private WifiStateEventListener mListener;
41-
private BroadcastReceiver mWifiReceiver = new BroadcastReceiver() {
42-
@Override
43-
public void onReceive(Context context, Intent intent) {
44-
String action = intent.getAction();
45-
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
46-
WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
47-
mListener.onNetworkChanged(wifiInfo);
48-
} else if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
49-
int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
50-
switch (state) {
51-
case WifiManager.WIFI_STATE_DISABLED:
52-
mListener.onWiFiDisabled();
53-
break;
54-
case WifiManager.WIFI_STATE_ENABLED:
55-
mListener.onWiFiEnabled();
56-
break;
57-
default:
58-
break;
59-
}
60-
}
61-
}
62-
};
6340

6441
public void onCreate(Bundle savedInstanceState) {
6542
super.onCreate(savedInstanceState);
6643
mDeviceMgr = getDeviceManager();
44+
mDeviceMgr.startDeviceDetection();
6745
Fragment fragment = getSupportFragmentManager().findFragmentByTag(TAG_LIST);
6846
if (fragment == null) {
6947
fragment = ThetaGalleryFragment.newInstance(mDeviceMgr);
7048
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
7149
ft.add(android.R.id.content, fragment, TAG_LIST);
7250
ft.commit();
7351
}
74-
mListener = getDeviceManager();
75-
IntentFilter filter = new IntentFilter();
76-
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
77-
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
78-
registerReceiver(mWifiReceiver, filter);
7952
}
8053

8154
@Override
8255
public void onDestroy() {
8356
super.onDestroy();
84-
unregisterReceiver(mWifiReceiver);
8557
}
8658

8759
public ThetaDeviceManager getDeviceManager() {

dConnectDevicePlugin/dConnectDeviceTheta/app/src/main/java/org/deviceconnect/android/deviceplugin/theta/activity/ThetaDeviceSettingsActivity.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ protected void onRestoreInstanceState(final Bundle savedInstanceState) {
7474
@Override
7575
protected void onResume() {
7676
super.onResume();
77-
getDeviceManager().checkConnectedDevice();
7877
getDeviceManager().startDeviceDetection();
7978
}
8079

dConnectDevicePlugin/dConnectDeviceTheta/app/src/main/java/org/deviceconnect/android/deviceplugin/theta/core/ThetaDeviceFactory.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ private ThetaDeviceFactory() {
1919
}
2020

2121
public static ThetaDevice createDeviceFromAccessPoint(final Context context, final WifiInfo wifiInfo) {
22-
return createDeviceFromAccessPoint(context, wifiInfo, null);
22+
return createDeviceFromAccessPoint(context, parseSSID(wifiInfo), null);
2323
}
2424

25-
public static ThetaDevice createDeviceFromAccessPoint(final Context context, final WifiInfo wifiInfo, final SocketFactory socketFactory) {
26-
String ssId = parseSSID(wifiInfo);
27-
if (ssId == null) {
25+
public static ThetaDevice createDeviceFromAccessPoint(final Context context, final String ssId, final SocketFactory socketFactory) {
26+
String name = ssId;
27+
if (name == null) {
2828
WifiManager wm = (WifiManager) context.getApplicationContext()
2929
.getSystemService(Context.WIFI_SERVICE);
3030
if (wm == null) {
@@ -34,21 +34,21 @@ public static ThetaDevice createDeviceFromAccessPoint(final Context context, fin
3434
if (info == null) {
3535
return null;
3636
}
37-
ssId = info.getSSID().replace("\"", "");
37+
name = info.getSSID().replace("\"", "");
3838
}
39-
ThetaDeviceModel model = parseModel(ssId);
39+
ThetaDeviceModel model = parseModel(name);
4040
switch (model) {
4141
case THETA_M15:
42-
ThetaM15 m15 = new ThetaM15(context, ssId);
42+
ThetaM15 m15 = new ThetaM15(context, name);
4343
if (m15.initialize()) {
4444
return m15;
4545
} else {
4646
return null;
4747
}
4848
case THETA_S:
49-
return new ThetaS(ssId, DEFAULT_HOST, socketFactory);
49+
return new ThetaS(name, DEFAULT_HOST, socketFactory);
5050
case THETA_V:
51-
return new ThetaV(ssId, DEFAULT_HOST, null, socketFactory);
51+
return new ThetaV(name, DEFAULT_HOST, null, socketFactory);
5252
default:
5353
return null;
5454
}

0 commit comments

Comments
 (0)